makefile 语法:html
目标文件:生成目标文件的依赖文件shell
生成目标文件所须要执行的动做(必须以tab键开头)优化
经常使用变量表明的意思: $@--目标文件,$^--全部的依赖文件,$<--第一个依赖文件。.net
~--当前用户目录,*全部符号的通配符调试
经常使用的查找包含符号:-I 将目标做为第一个寻找头文件的目标htm
-L将目标做为第一个寻找库文件的目标blog
-l在目标中寻找.so文件,如-lword在指定目录寻找libworld.so这个动态库文件编译
make能够自动推导文件以及文件依赖关系后面的命令,因而咱们就不必去在每个[.o]文件后都写上相似的命令,由于,咱们的make会自动识别,并本身推导命令。只要make看到一个[.o]文件,它就会自动的把[.c]文件加在依赖关系中,若是make找到一个whatever.o,那么whatever.c,就会是whatever.o的依赖文件。而且 cc -c whatever.c 也会被推导出来。因此这样也是可行的 whatever.o : defs.h,固然这样会下降makefile的可读性。模板
伪目标:变量
为了不和文件重名的这种状况,咱们可使用一个特殊的标记“.PHONY”来显示地指明一个目标是“伪目标”,向make说明,无论是否有这个文件,这个目标就是“伪目标”。
只要有这个声明,无论是否有“clean”文件,要运行“clean”这个目标,只有“make clean”这样。因而整个过程能够这样写:
.PHONY: clean
clean:
rm *.o temp
命令:
显示命令:echo 。。。
若是你要让上一条命令的结果应用在下一条命令时,你应该使用分号分隔这两条命令。
经常使用的在目标文件夹中包含全部的c文件命令:shell find 路径 -maxdepth -name "*.c"
判断目录是否存在命令:shell if [! -d '/data/'] 若是data目录不存在,则执行。。。
编译宏以“define”开始,以“endef”结束
gcc经常使用参数:
-o指定输出文件名
-O优化编译、连接
-c只编译不连接
-g增长gdb调试
-w关闭编译告警
-W打开编译告警
-fPIC产生与位置无关的代码(生成动态库.SO时候用)
-WI,-Bsymbolic 强制动态库使用本身的符号
参考连接:https://blog.csdn.net/weixin_38391755/article/details/80380786
小型可参考的makefile模板:https://www.cnblogs.com/prettyshuang/p/5552328.html