Makefile产生背景
一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。
Makefile文件完整过程
- 工程中需编译源文件及如何编译
- 需创建库文件及如何创建这些库文件
- 最后产生我们想要的可执行文件
makefile编写原则
1.似Shell脚本
shell脚本编译基本原则(类同原则)
# 井号。除了做为超级用户的提示符之外,还可以在脚本中做为注释的开头字母,每一行语句中,从#号开始的部分就不执行了。
${VARIABLE} 基本变量替换。大括号限定变量名的开始和结束
TAB键 使用原则
更多参考原则
2.makefile结构
# 变量定义
VAR=test 定义变量VAR,强制赋值为app
VAR+=app 在VAR之前定义的值后面再追加app这个值
VAR?=testapp 如果之前VAR没有被定义,则定义并使用testapp;否则使用之前的值,连接作用
3.基本原则
- 第一条目标为总的目标,
- 依赖可以是文件(目录)或为其他目标
- 动作可以是Linux命令,动作的那一行第一个字符必须是以TAB键
样例:
target: depend1 depend2 depend3 ...
[TAB] action1
[TAB ] action2
target1:
[TAB] action1
[TAB] action2
4.注意点:
makefile可使用名字:
makefile(优先级高) Makefile GNUmakefile
运行命令:make+命令行名称
直接运行make
系统会自动寻找Makefile文件
Makefile文件内命令执行存在依赖满足关系
gcc编译命令风格:`编译选项一般置前,链接滞后`
gcc ${APPS} main.c -o ${APPS} ${LDFLAGS}
标志 `CFLAGE compile options` 编译选项
链接 `LDFLAGE link options`链接选项
Makefile使用
make 找makefile或Makefile文件执行总的目标
make clean 执行makefile文件中的clean目标
make -C directory 进入到directory文件夹中去执行总的目标
make clean -C direcotry 进入到directory文件夹中去执行clean目标
make -f comm_makefile 通过-f选项指定一个makefile文件
make VAR=value 给Makefile传一个参数VAR,其值为value