嵌入式项目Makefile设计的一般方法

【嵌入式八股16】Makefile 返回names结果为c。 阅读详情

  本文以视频会议项目为背景,讨论如何使用WindRiver Tornado2.2的GNU工具链中的make工具编译各个模块的源代码,为嵌入式项目创建Makefile提供一般的设计方法。

具体方法如下:
1.先为所有模块,如下图中的code/source/appl目录下dp_new、gc、mc等编写一个全局的Makefile,取名为Makefile.global,放在code/include中。这个全局MAKEFILE用于指明工具链、各个子模块的相对路径、obj文件存放的位置,要引用的头文件和库文件目录等。
2.为各个模块如dp_new,gc,mc等编写子Makefile。在这些子Makefile使用include引用Makefile.global并指明要编译的源文件和编译规则已经最终要生成的目标,这里以gc模块为例,来说明如何书写便宜规则!

# Description:Global makefile for sub-modules 
# Author:http:
//blog.sina.com.cn/embeddedsoft
         http://blog.youkuaiyun.com/embeddedsoft


#here define CPU type, compiler    tools faimly, compile rule
CPU                                        
= PPC603
TOOL                                    
= gnu
TOOL_FAMILY                        
= gnu
DEFAULT_RULE                    
= vxWorks

AR                                        
= arppc
AS                                        
= ccppc
BOOT_EXTRA                        
=
CC                                        
= ccppc
CPPC                                    
= c++ppc

# Modify path when the path    of source code was changed
WIND_CODE_BASE                
= E:/cvsroot2/MCU500/code

WIND_PROJECT_BASE            
= $(WIND_CODE_BASE)/build
WIND_SOURCE_BASE            
= $(WIND_CODE_BASE)/source

PRJ_ROOT_DIR                     
= $(WIND_PROJECT_BASE)
SRC_ROOT_DIR                     
= $(WIND_SOURCE_BASE)
INC_ROOT_DIR                     
= $(WIND_CODE_BASE)/include
LIB_ROOT_DIR                     
= $(WIND_CODE_BASE)/lib

# target and bsp module
TARGET_DIR                        
= $(WIND_BASE)/target
TARGET_INCLUDE_DIR        
= $(TARGET_DIR)/h
TARGET_COMPS_SRC_DIR    
= $(TARGET_DIR)/config/comps/src
TARGET_DRV_SRC_DIR        
= $(TARGET_DIR)/src/drv

BSP_DIR                                
= $(SRC_ROOT_DIR)/bsp/nw8260_323

BSP_INCLUDE_DIR                
= $(BSP_DIR)/nwh

# MainCtrl module
MC_DIR                            
= $(SRC_ROOT_DIR)/appl/mc
MC_INCLUDE_DIR           
= $(MC_DIR)/include
MC_SOURCE_DIR            
= $(MC_DIR)/source

# Console module
CONSOLE_DIR                        
= $(SRC_ROOT_DIR)/appl/ui/console
CONSOLE_INCLUDE_DIR     
= $(CONSOLE_DIR)/include
CONSOLE_SOURCE_DIR       
= $(CONSOLE_DIR)/source

# rs module
RS_DIR                                
= $(SRC_ROOT_DIR)/appl/ui/rs
RS_INCLUDE_DIR             
= $(RS_DIR)/include
RS_SOURCE_DIR              
= $(RS_DIR)/source

# Comm module
COMM_DIR                            
= $(SRC_ROOT_DIR)/base/comm_new
COMM_INCLUDE_DIR          
= $(COMM_DIR)/include
COMM_SOURCE_DIR            
= $(COMM_DIR)/source

# stack module
STACK_DIR                            
= $(SRC_ROOT_DIR)/appl/stack

# DataProcess module
DP_DIR                                
= $(SRC_ROOT_DIR)/appl/dp_new
DP_INCLUDE_DIR                
= $(DP_DIR)/include
DP_SOURCE_DIR                    
= $(DP_DIR)/source

#web module
EWSMCU_INCLUDE_DIR       
= $(SRC_ROOT_DIR)/appl/ui/web/EWS_MCU/include
EWSMCU_SOURCE_DIR          
= $(SRC_ROOT_DIR)/appl/ui/web/EWS_MCU/source

# common module
COMMON_DIR                        
= $(SRC_ROOT_DIR)/base/common


# application
PRJ_DIR                                
= $(PRJ_ROOT_DIR)
OBJ_DIR                                
= $(PRJ_ROOT_DIR)/binary
APP_INCLUDE_DIR                
= $(WIND_CODE_BASE)/include

CFLAGS                                 
= -g     
                                            
-mcpu=603 -mstrict-align 
                                            
-ansi    -fno-builtin  
                                            
-DCPU=PPC603 
                                            
-DTOOL_FAMILY=gnu 
                                            
-DTOOL=gnu    
                                            
-DPRJ_BUILD    
                                            
-D__VXWORKS__ 
                                            
-DCODEC_RTOS
                                            
-DVXWORKS 
                                            
-DUEMF 
                                            
-DWEBS_PAGE_ROM 
                                            
-DWEBS 
                                            
-D__NO_PACK 
                                            
-DDEVICE_MCU 

INCLUDE_DIR                        
= -I$(BSP_DIR)
                                            
-I$(BSP_INCLUDE_DIR)
                                            
-I$(INC_ROOT_DIR)
                                            
-I$(TARGET_INCLUDE_DIR)
                                            
-I$(BSP_INCLUDE_DIR)
                                            
-I$(TARGET_DRV_SRC_DIR)
                                            
-I$(PRJ_DIR)
                                            
-I$(OBJ_DIR)
                                            
-I$(MC_DIR)
                                            
-I$(MC_INCLUDE_DIR)
                                            
-I$(MC_SOURCE_DIR)
                                            
-I$(DP_DIR)
                                            
-I$(DP_INCLUDE_DIR)
                                            
-I$(DP_SOURCE_DIR)
                                            
-I$(CONSOLE_DIR)
                                            
-I$(CONSOLE_INCLUDE_DIR)
                                            
-I$(CONSOLE_SOURCE_DIR)
                                            
-I$(EWSMCU_INCLUDE_DIR)
                                            
-I$(EWSMCU_SOURCE_DIR)
                                            
-I$(COMM_INCLUDE_DIR)
                                            
-I$(COMM_SOURCE_DIR)
                                            
-I$(RS_INCLUDE_DIR)
                                            
-I$(RS_SOURCE_DIR)


CFLAGS                                 
+= $(INCLUDE_DIR)

MAKE                                     
= $(WIND_BASE)/host/x86-win32/bin/make
RM                                         
= rm
CP                                         
= $(WIND_BASE)/host/x86-win32/bin/cp

 

# Description:Makefile used to build GC module 
# Author:http:
//blog.sina.com.cn/embeddedsoft
         http://blog.youkuaiyun.com/embeddedsoft

include     ..
/../../include/Makefile.global
 
APP_GC    
=     $(LIB_ROOT_DIR)/gc.a

SRCS    
=     gcaddrbook.c
        gccallhistory.c
        gccapacity.c
        gcconftemplate.c
        gcdevice.c
        gcendpointinfo.c
        gcgateway.c
        gcgk.c
        gcglobal.c
        gcmulticast.c
        gcnet.c
        gcresethistory.c
        gcrs.c
        gcupdate.c
        gcweb.c        

OBJS2     :
=     $(SRCS:.c=.o)
OBJS    :
=     $(addprefix $(OBJ_DIR)/,$(OBJS2))

$(APP_GC):$(OBJS) 
        $(RM) 
-f $(APP_GC)
        $(AR) 
-r $(APP_GC) $(OBJS)        
                    
$(OBJ_DIR)
/%.o: %.c
        $(CC) 
-c -o $@ $(CFLAGS) $<
clean:
        $(RM) $(APP_GC) $(OBJS) 

 

STM32嵌入式系统Makefile开发指南 在嵌入式系统开发的世界中,STM32微控制器因其高性能和高效率而广受欢迎。为了有效地构建STM32项目,工程师们常常利用Makefile这一强大的工具。Makefile是一种自动化编译工具,它能够根据文件的修改情况,仅重新编译修改过的文件,从而节省大量时间,提高开发效率。在本章中,我们将介绍STM32的Makefile工程基础,为后续章节中对Makefile的深入分析打下坚实的基础。我们将从基本概念开始,逐步过渡到Makefile的实际应用,确保读者能够理解并应用于自己的项目中。 阅读详情

相关推荐

auto.js梦幻西游游戏脚本,梦幻西游脚本开发思路

本篇文章给大家谈谈梦幻西游脚本用什么语言写,以及auto.js梦幻西游游戏脚本,希望对各位有所帮助,不要忘了收藏本站喔。

npy199331的博客 1936

Pytorch安装

文章目录 https://blog.csdn.net/zzq060143/article/details/88042075?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.edu_weight&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.edu_w

HsinglukLiu的博客 337

抖音视频数据获取实战:从API调用到热门内容挖掘

通过抖音API获取视频数据,企业可快速构建数据驱动的运营体系。本文提供了从权限申请到商业落地的全流程指南,建议结合自身业务扩展功能。如有技术问题,欢迎​​评论​​区留言讨论!#抖音开发 #数据挖掘 #短视频运营 #API调用 #Python实战。

WBKJ_Noah_的博客 6385

postgres数据库内核开发--gdb调试问题

背景 postgres数据库安装在这就不多讲了,下面我们讲讲在实际开发过程中,要使编译的数据库可以进行正常调试,不至于遇到下面问题: Single stepping until exit from function exec_simple_query, which has no line number information。 过程 下载postgres后进入编译目录时,按照要求,需要建立一个build目录。cd build,进入目录后,执行命令:…/configure --prefix=$HOME/pg

weixin_44031114的博客 1920

利用ADS设计射频功率放大器

利用ADS设计射频功率放大器 任务: 用飞思卡尔公司的功率放大器芯片ATF27s006NT1设计射频功放,芯片频率范围可达450MHz-3.6GHz。 功放指标: (1) 工作频率:500MHz (2) 增益:G>20dB (3) 电源:+28V (4) 最大输出功率:2W(33dBm) 设计思路 (1)安装DesignKit模型; (2)直流DC扫描; (3)稳定性分析; (4)偏置电路设计及整...

UVM频率 3万+

从冰棍到铸钢:手把手用Fluent融化凝固模型模拟3个不同场景(含案例设置对比)

本文深入探讨了Fluent融化凝固模型在冰棍融化、巧克力涂层凝固和钢铁连铸三个不同场景中的应用。通过详细的参数设置和案例对比,帮助工程师掌握相变模拟的核心技巧,提升工业级CFD分析的精度和效率。

weixin_42522953的博客 471

php7 的makefile,Makefile.global

mkinstalldirs = $(top_srcdir)/build/shtool mkdir -pINSTALL = $(top_srcdir)/build/shtool install -cINSTALL_DATA = $(INSTALL) -m 644DEFS = -DPHP_ATOM_INC -I$(top_builddir)/include -I$(top_builddir)/main...

weixin_42372731的博客 830

CoppeliaSim远程API实战:用Python控制仿真机器人,5步搞定外部通信

本文详细介绍了如何使用Python通过CoppeliaSim远程API控制仿真机器人,实现外部通信的5个关键步骤。从环境配置到双向通信模式,再到实战案例和性能优化技巧,帮助开发者高效连接算法开发与物理验证。特别对比了B0与传统API的性能差异,提升工业自动化项目的开发效率。

weixin_28733637的博客 365

Postgresql源码(140)理解PG的编译流程(make、Makefile、Makefile.global.in)

理解Postgresql的编译流程。

InternalsOf 1379

微店构造订单页面,自动化抢票

之前的文章写过微店抢票如何构造订单页面分析,这篇文章在之前的基础上,进行抢票。

猫敷雪 7199

[关系图谱] 二.Gephi导入共线矩阵构建作者关系图谱

本文主要讲解Gephi绘制作者间的关系图谱,该软件可以广泛应用于社交网络、知识图谱分析,推荐读者使用。这是非常基础的一篇文章,重点讲解Gephi使用方法,希望对大家有所帮助。

杨秀璋的专栏 1万+

PostgreSQL-UDF用户自定义函数-扩展插件

【代码】PostgreSQL-UDF用户自定义函数-扩展插件。

m0_46182627的博客 2126

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

嵌入式之Makefile的学习

本文章适用于从事嵌入式uboot移植,和驱动开发的工程师阅读,涉及到的知识点比较基础,涉及内容不是那么深入。 首先Makefile是管理一个大型项目必须的文件,当一个项目中涉及到多个C语言程序,和.h头文件程序,这种情况下就必须使用到Makefile进行项目的编译和链接。Makefile文件的格式: 目标:依赖 TAB命令 命令前面是一个Tab键,当且仅当是Tab按键,不能是空格,必须是一...

qq_35480173的博客 763

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

嵌入式中的Makefile应用

文章目录一.Makefile 引入二. Makefile语法1.通配符2.假象目标3.变量三.Makefile函数四.实例 本文主要总结一下嵌入式开发中的Makefile,一般项目中都需要使用Makefile来管理程序,负责协调各文件之间的依赖关系和组织生成有用文件。 本文参考C语言中文网有关Makefile的教程, http://c.biancheng.net/view/7094.html 一....

肥宅快乐博客 2310

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

第 36 天:Makefile 与 CMake 在嵌入式项目中的使用技巧

构建系统在嵌入式开发中扮演着至关重要的角色。无论是传统的 Makefile,还是近年来广泛使用的 CMake,如何组织好源码结构、管理编译依赖、实现多平台适配、控制构建输出,是影响开发效率和系统稳定性的关键因素。本文将以嵌入式实际项目为基础,剖析 Makefile 与 CMake 的使用技巧与差异,展示其在 STM32、ESP32、裸平台与 RTOS 项目中的工程落地路径,并给出模块化构建、编译优化与调试协同的实战建议。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1281

【嵌入式】详解嵌入式交叉编译指南:Configure、CMake和Makefile方法

详解嵌入式交叉编译指南:Configure、CMake和Makefile方法。在嵌入式开发中,交叉编译开源软件是一个常见的任务,它涉及到将源代码编译成能够在目标嵌入式平台上运行的二进制文件。由于嵌入式平台的硬件架构和操作系统可能与开发机器不同,因此需要使用交叉编译工具链来完成这一任务。本文将详细介绍使用不同构建系统进行交叉编译的方法,并扩充一些注意事项和可能遇到的问题。

科技改变人类,技术成就未来 3833

嵌入式Linux中的Makefile文件指南

Makefile是一个特殊的文件,包含了一系列的指令,用于告诉make工具如何编译和链接程序。它定义了目标文件、依赖关系以及构建这些目标所需的命令。明确你想要构建的最终产品(目标)以及生成这些产品所需的源文件(依赖)。Makefile是嵌入式Linux开发中不可或缺的工具,它能够极大地简化编译和链接过程。通过理解Makefile的基本概念和结构,开发者可以编写出更加高效、可维护的构建脚本。记住,一个好的Makefile不仅能节省时间,还能提高项目的可读性和可移植性。

一个夜猫子的博客 1027

【嵌入式】Linux开发工具make及makefile设计

make工具及makefile设计make工具及makefile设计Makefile 设计示例Makefile 规则--构成Makefile 变量(宏)Makefile 条件判断Makefile 中 for 语句Makefile 规则wildcard 函数(通配符)patsubst 函数(模式字符串替换)隐含规则伪目标标准版 Makefilemakefile文件的命名课后作业 make工具及mak...

萌宅鹿的技术小屋 3707

嵌入式MakeFile

本文详细介绍了Makefile的核心概念和使用方法,主要内容包括: Makefile基础语法:目标、依赖和命令的格式,以及伪目标(.PHONY)的使用 变量使用:四种赋值方式(=, :=, ?=, +=)及变量引用 自动化变量:$@(目标文件)、$<(第一个依赖文件)、$^(所有依赖文件) 常用函数:notdir(去除路径)、wildcard(获取文件列表)、patsubst(模式替换) 多级目录工程管理:通过变量和函数实现源文件、头文件和输出文件的分目录管理 条件分支:使用ifeq实现不同平台的编译

keep on going 909

【嵌入式Linux基础】Makefile详解

Makefile是一个自动化构建脚本,用于定义项目的编译规则、依赖关系和执行流程。它的核心价值在于:​自动化编译:一键完成「源码 → 目标文件 → 可执行文件」的全流程​避免复杂命令行并减少编译时间增量构建:只重新编译修改过的文件,大幅提升开发效率​统一规范:为项目提供标准化的构建方式,便于团队协作​makefile博大精深,还有很多内容如隐含规则等并没有在本文中介绍,日后精进了,再写其进阶。

lzm548的博客 1640

嵌入式之Makefile学习笔记

注: 以下内容来自朱老师物联网大讲堂课件 1. 为什么需要Makefile 工程项目中c文件太多管理不方便,因此用Makefile来做项目管理,方便编译链接过程。 在一个正式的软件项目中,由很多个.c和.h文件构成,此时如果直接在命令行编译,就会像这样:gcc a.c b.c c.c d.c e.c f.c g.c -o exe 每次编译都要输入一堆东西很麻烦,这个问题严重影响工作效率,所以我们就使用Makefile来进行管理 makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make

donke_dong 973

使用Makefile管理项目

Makefile 是一种用于自动化编译和构建程序的文件,它包含了一系列的规则(rules),这些规则指定了如何编译和链接程序中的源文件以生成可执行文件或其他非源代码文件。Makefile 使得编译过程更加高效和可重复,尤其是在处理包含多个源文件和复杂依赖关系的项目时。注释:以开头的行为注释。变量:Makefile 中可以定义变量来存储文件名、编译器选项等,以便在多处重复使用。规则(Rules):Makefile 中的核心部分,每个规则定义了如何生成一个或多个目标文件(通常是可执行文件或对象文件)。

dcq715的博客 1162

【嵌入式】Makefile 学习笔记记录 | 嵌入式Linux

【嵌入式】Makefile 学习笔记记录 | 嵌入式Linux

weixin_46274756的博客 1324

【嵌入式Linux】Makefile 实战教程:从零看懂一个完整的项目编译脚本

本文以嵌入式 Linux 网关项目(集成 SQLite/MQTT)为例,手把手教你编写 Makefile。针对习惯 IDE 开发者的痛点,文章提供了一份可直接复用的通用模板,并深入拆解交叉编译、头文件引用 (-I)、静态链接 (-static) 等核心参数。重点剖析了“库链接顺序导致 undefined reference”等经典坑点(如为何 -lpthread 必须后置)。无论你是新手还是进阶工程师,这篇实战指南都能帮你彻底搞懂 Makefile 底层逻辑,让自动化编译不再是拦路虎。

qq_48862970的博客 1586
上一篇: 2007年想完成的四件事情--有多少投入就有多少产出?
embeddedsoft
博客等级 码龄20年 51粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值