make和Makefile自动化构建并能决定源文件调用顺序,同时不必再写gcc命令
第一行依赖关系,第二行是tab键开头,是依赖方法
依赖关系:目标文件:依赖文件。
依赖方法:目标文件和依赖文件间的关系。
如果只有一条依赖那么依赖关系似乎作用不大,因为依赖关键字是什么make 都会执行指令,当有多条依赖时,依赖关系可以决定依赖的调用顺序。
运行的逻辑:从目标文件test.o寻找test.i依赖文件,再根据第二个依赖关系,寻找test.i 使得代码的由下往上运行,通过依赖关系来决定代码调用顺序。
执行make指令,能找到Makefile文件夹运行指令
clean:依赖关系为空,删除可执行文件,一般习惯上还用.PHONY修饰。
make显式调用clean
make + 目标文件:指定执行依赖,make指令由上往下执行到递归式完成一个依赖关系为止,不会执行clean依赖,所以必须显式调用clean
make不能反复调用
当文件没有更新时,那么不会再编译,实现方法,比较源文件和可执行文件时间,如果源文件最近修改时间晚于可执行文件,不需要重新编译,如果是先于,需要重新编译。
文件的时间
stat test
access:最近访问时间 Modify:最近修改文件内容 Change:最近文件属性(权限,尺寸)
当文件内容/属性被修改时文件的access也会被修改。access会被修改但是change或modify多次后才会显示出变化。一般通过Modify的时间决定是否重新编译。
touch文件可以手动更新到当前时间。完成多次make
伪目标.PHONY关键字实现依赖能反复执行(更常放在clean处)
特殊字符
用 $^依赖文件 $@表示目标文件 @在指令前能取消回显