Linux项目自动化构建工具-make/Makefile

操作系统中有一个命令叫make
makefile中记录的是一系列的编译规则,当我们执行make命令,那么make这个程序就会当前目录下查找makefile文件,然后一步步的解释执行makefile中记录的编译规则,最终通过这些编译规则完成项目的整个编译。
makefile的编写规则
| 生成文件:依赖文件
| [\t] 为了完成生成文件的生成,要执行的命令
例:
main:main.c
gcc main.c -o main

当makefile编写完毕后,保存退出,直接敲击make命令,那么make命令所对应的程序会到当前目录下找到makefile文件,然后按照makefile中记录的编译规则来完成最终的项目编译。因此makefile名只能叫makefile/Makefile。

makefile会记录源文件和程序文件的时间信息,如果源文件的最后一次修改时间是在程序文件之后,那么就会重新编译程序,否则将报告程序是最新的,而不需要重新编译。
make永远只生成第一个对象,生成完之后退出,所以不会再去生成第二个。
例:
main.c child.c,只生成main.c

如果makefile有多个要生成的对象,那么就需要在最上边定义个对象,将要生成的对象都作为这个对象的依赖对象。
伪对象:.PHONY ----代表每次都需要重新编译(因为刚make main.c会提醒说已经是最新,为避免这种情况发生,所以用伪对象)

make可以指定要生成的对象
例:
make clean
make -C dir
-C 进入指定目录下执行make命令
例:
make -C tools---------直接执行了main.c和child.c(tools目录下有main.c和child.c文件)

makefile中变量赋值有好几种方式:
= -------是最基本的赋值
?= ------如果没有被赋值过就赋予等号后面的值
:= ------即时赋值
+= -----追加赋值
有何不同:
例:
a = 1; b = $a; a = 2 =====>b = 2
a = 1; b := $a; a = 2 ======>b = 1

你可能感兴趣的:(Linux)