本文只介绍makefile中的命令和符号的作用。
***********************************************************************
:
依赖,冒号前面是目标,后面是依赖的文件
***********************************************************************
\
换行符,写不下的时候换行用。
***********************************************************************
#
注释,如果要使用#
***********************************************************************
命令 | 说明 |
-x <language type> | 显示指定输入文件的格式 |
-c | 编译和汇编源文件,但不链接,输出为.o文件格式 |
-S | 编译源文件,但不汇编,输出为.S文件格式 |
-E | 只对源文件进行预处理,并不编译,输出为经过预处理的源代码 |
我们可以利用上面的-x和-c / –S / –E的组合来控制GCC的整个编译过程,其中-x用于告诉GCC我们从哪里开始,而-c / -S / -E用来告诉GCC在那里结束。 | |
-o output-file | 用来指定输出文件,该选项可以指定很多种输出文件,例如:可执行文件、目标文件、汇编文件或者是预处理过的程序代码等,这要根据具体的命令行参数而定。当然,GCC还提供了默认的-o选项,其中,默认的可执行文件是a.out,目标文件是<file_name>.o,汇编文件是<file_name>.s,预编译头文件的格式是<file_name>.suffix.gch |
-I<dir name> | 告诉GCC在<dir name>中去寻找头文件 |
-L<dir name> | 告诉GCC在<dir name>中去寻找库文件 |
-l<lib name> | 使用名为lib<lib name>.so的程序库 |
-static | 通知GCC链接静态库 |
***********************************************************************
-M 或者 -MM
自动找头文件,“-M”参数会把一些标准库的头文件也包含进来,“-MM”只会包含非标准库的头文件。
如:gcc -MM main.c的输出则是:
main.o: main.c defs.h
***********************************************************************
=或:=
= 和 := 的区别在于, := 只能使用前面定义好的变量, = 可以使用后面定义的变量。
***********************************************************************
@ 和 -, 或者不用前缀
- 不用前缀 :: 输出执行的命令以及命令执行的结果, 出错的话停止执行
- 前缀 @ :: 只输出命令执行的结果, 出错的话停止执行
- 前缀 - :: 命令执行有错的话, 忽略错误, 继续执行
***********************************************************************
include
引用其他makefile
***********************************************************************
自动变量 | 含义 |
$@ | 目标集合 |
$% | 当目标是函数库文件时, 表示其中的目标文件名 |
$< | 第一个依赖目标. 如果依赖目标是多个, 逐个表示依赖目标 |
$? | 比目标新的依赖目标的集合 |
$^ | 所有依赖目标的集合, 会去除重复的依赖目标 |
$+ | 所有依赖目标的集合, 不会去除重复的依赖目标 |
$* | 这个是GNU make特有的, 其它的make不一定支持 |
***********************************************************************
ifeq ifneq ifdef ifndef
条件判断
***********************************************************************
***********************************************************************
***********************************************************************
***********************************************************************
***********************************************************************
***********************************************************************