韦东山通用Makefile文件

上传者: WENGPJ | 上传时间: 2021-07-02 16:14:46 | 文件大小: 7KB | 文件类型: ZIP
本程序的Makefile分为3类:
1. 顶层目录的Makefile
2. 顶层目录的Makefile.build
3. 各级子目录的Makefile

一、各级子目录的Makefile:
它最简单,形式如下:

EXTRA_CFLAGS :=
CFLAGS_file.o :=

obj-y += file.o
obj-y += subdir/

"obj-y += file.o" 表示把当前目录下的file.c编进程序里,
"obj-y += subdir/" 表示要进入subdir这个子目录下去寻找文件来编进程序里,是哪些文件由subdir目录下的Makefile决定。
"EXTRA_CFLAGS", 它给当前目录下的所有文件(不含其下的子目录)设置额外的编译选项, 可以不设置
"CFLAGS_xxx.o", 它给当前目录下的xxx.c设置它自己的编译选项, 可以不设置

注意:
1. "subdir/"中的斜杠"/"不可省略
2. 顶层Makefile中的CFLAGS在编译任意一个.c文件时都会使用
3. CFLAGS EXTRA_CFLAGS CFLAGS_xxx.o 三者组成xxx.c的编译选项

二、顶层目录的Makefile:
它除了定义obj-y来指定根目录下要编进程序去的文件、子目录外,
主要是定义工具链前缀CROSS_COMPILE,
定义编译参数CFLAGS,
定义链接参数LDFLAGS,
这些参数就是文件中用export导出的各变量。

三、顶层目录的Makefile.build:
这是最复杂的部分,它的功能就是把某个目录及它的所有子目录中、需要编进程序去的文件都编译出来,打包为built-in.o
详细的讲解请看视频。

四、怎么使用这套Makefile:
1.把顶层Makefile, Makefile.build放入程序的顶层目录
在各自子目录创建一个空白的Makefile

2.确定编译哪些源文件
修改顶层目录和各自子目录Makefile的obj-y :
obj-y += xxx.o
obj-y += yyy/
这表示要编译当前目录下的xxx.c, 要编译当前目录下的yyy子目录

3. 确定编译选项、链接选项
修改顶层目录Makefile的CFLAGS,这是编译所有.c文件时都要用的编译选项;
修改顶层目录Makefile的LDFLAGS,这是链接最后的应用程序时的链接选项;

修改各自子目录下的Makefile:
"EXTRA_CFLAGS", 它给当前目录下的所有文件(不含其下的子目录)设置额外的编译选项, 可以不设置
"CFLAGS_xxx.o", 它给当前目录下的xxx.c设置它自己的编译选项, 可以不设置

4. 使用哪个编译器?
修改顶层目录Makefile的CROSS_COMPILE, 用来指定工具链的前缀(比如arm-linux-)

5. 确定应用程序的名字:
修改顶层目录Makefile的TARGET, 这是用来指定编译出来的程序的名字

6. 执行"make"来编译,执行"make clean"来清除,执行"make distclean"来彻底清除

文件下载

资源详情

[{"title":"( 13 个子文件 7KB ) 韦东山通用Makefile文件","children":[{"title":"05_general_Makefile","children":[{"title":"example","children":[{"title":"Makefile.build <span style='color:#111;'> 879B </span>","children":null,"spread":false},{"title":"main.c <span style='color:#111;'> 239B </span>","children":null,"spread":false},{"title":"include","children":[{"title":"sub3.h <span style='color:#111;'> 41B </span>","children":null,"spread":false},{"title":"sub2.h <span style='color:#111;'> 41B </span>","children":null,"spread":false},{"title":"sub.h <span style='color:#111;'> 36B </span>","children":null,"spread":false}],"spread":true},{"title":"sub.c <span style='color:#111;'> 108B </span>","children":null,"spread":false},{"title":"a","children":[{"title":"sub2.c <span style='color:#111;'> 195B </span>","children":null,"spread":false},{"title":"sub3.c <span style='color:#111;'> 275B </span>","children":null,"spread":false},{"title":"Makefile <span style='color:#111;'> 96B </span>","children":null,"spread":false}],"spread":true},{"title":"Makefile <span style='color:#111;'> 919B </span>","children":null,"spread":false}],"spread":true},{"title":"Makefile_and_readme","children":[{"title":"Makefile.build <span style='color:#111;'> 879B </span>","children":null,"spread":false},{"title":"说明.txt <span style='color:#111;'> 2.06KB </span>","children":null,"spread":false},{"title":"Makefile <span style='color:#111;'> 919B </span>","children":null,"spread":false}],"spread":true}],"spread":true}],"spread":true}]

评论信息

免责申明

【只为小站】的资源来自网友分享,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,【只为小站】 无法对用户传输的作品、信息、内容的权属或合法性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论 【只为小站】 经营者是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。
本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二条之规定,若资源存在侵权或相关问题请联系本站客服人员,zhiweidada#qq.com,请把#换成@,本站将给予最大的支持与配合,做到及时反馈和处理。关于更多版权及免责申明参见 版权及免责申明