本程序的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"来彻底清除
没有合适的资源?快使用搜索试试~ 我知道了~
linux应用开发中makefile源码
共76个文件
c:20个
makefile:15个
h:6个
0 下载量 85 浏览量
2023-11-06
21:57:23
上传
评论 1
收藏 2.79MB ZIP 举报
温馨提示
在Linux系统中,Makefile是一种文本文件,用于定义和管理软件项目的编译和构建过程。Makefile使用make命令来根据定义的规则和依赖关系自动化地进行编译和构建。 Makefile通常包含以下内容: 1. 变量(Variables):用来存储和引用一些常用的数据,例如编译器路径、编译选项等。通过使用变量,可以方便地在Makefile中进行配置和修改。 2. 目标(Targets):定义需要构建的目标文件,例如可执行文件、库文件等。每个目标都有一个对应的规则,描述了如何生成该目标文件。 3. 依赖关系(Dependencies):描述目标文件的依赖关系,即生成该目标文件所需要的源文件、头文件或其他目标文件。如果依赖的文件发生变化,make会自动重新编译相关的目标文件。 4. 规则(Rules):定义了如何生成目标文件的具体步骤。规则通常由一条或多条命令组成,用于执行编译、链接等操作。 5. Phony目标(Phony Targets):用于定义一些特殊的目标,例如清理编译产生的中间文件、生成文档等。Phony目标不对应具体的文件,只是一些需要执行的操作。
资源推荐
资源详情
资源评论
收起资源包目录
Makefile源码.zip (76个子文件)
Makefile源码
03_test_Makefile_visual_studio_2019
main
.vs
main
v16
Browse.VC.db 1.47MB
.suo 49KB
ipch
AutoPCH
11d0e471f165fbe8
MAIN.ipch 2.25MB
c35f66fa4553b9a7
SUB.ipch 2.25MB
3863e7a5eabf1797
SUB.ipch 2.25MB
8ea79a8f19c2dc13
SUB.ipch 2.25MB
4969f52a55334e78
MAIN.ipch 2.25MB
main
main.vcxproj.filters 1KB
main.cpp 154B
main.vcxproj 8KB
sub.h 36B
sub.cpp 106B
main.vcxproj.user 168B
Debug
main.Build.CppClean.log 2KB
vc142.idb 43KB
vc142.pdb 84KB
main.vcxproj.FileListAbsolute.txt 0B
main.tlog
CL.write.1.tlog 3KB
main.lastbuildstate 315B
CL.command.1.tlog 2KB
link.command.1.tlog 2KB
link.read.1.tlog 4KB
link.write.1.tlog 1KB
CL.read.1.tlog 4KB
main.log 196B
sub.obj 7KB
main.obj 7KB
main.sln 1KB
Debug
main.ilk 332KB
main.exe 38KB
main.pdb 556KB
04_2018_Makefile
003_example
include
c.h 19B
clean 0B
c.c 96B
Makefile 351B
a.c 116B
b.c 72B
002_syntax
004_function
c.c 72B
Makefile 403B
a.c 80B
b.c 72B
002_phony
clean 0B
c.c 72B
Makefile 108B
a.c 80B
b.c 72B
003_variable
Makefile 135B
001_patten
c.c 72B
Makefile 68B
a.c 80B
b.c 72B
001_test_app
Makefile 101B
a.c 68B
b.c 72B
05_general_Makefile
Makefile_and_readme
Makefile.build 900B
Makefile 930B
说明.txt 2KB
example
include
sub3.h 41B
sub.h 36B
sub2.h 41B
Makefile.build 900B
Makefile 930B
a
Makefile 96B
sub2.c 195B
sub3.c 275B
sub.c 108B
main.c 239B
04_test_Makefile
02_Makefile
Makefile 166B
04_Makefile
Makefile 130B
Makefile 418B
sub.h 36B
sub.c 106B
main.c 154B
05_Makefile
Makefile 418B
01_Makefile
Makefile 60B
03_Makefile
Makefile 112B
共 76 条
- 1
资源评论
妄北y
- 粉丝: 1w+
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功