Makefile – 重新编译

如前所述,make工具会根据所依赖的源文件是否有更新来决定目标文件是否需要重新编译。

如下所示,functions.h修改了会导致所有目标文件重新编译;而hello.cpp修改只会导致hello.o hello重新编译,其他如main.o factorial.o都不会重新编译。

hello: main.o factorial.o hello.o
    $(CC) main.o factorial.o hello.o -o hello

main.o: main.cpp functions.h
    $(CC) -c main.cpp

factorial.o: factorial.cpp functions.h
    $(CC) -c factorial.cpp

hello.o: hello.cpp functions.h
    $(CC) -c hello.cpp

在编译时,make比较源文件与对应目标文件的时间戳,如果源文件时间戳比目标文件的更新,则认为源文件已更改,将重新生成目标文件。

避免重新编译

  • 执行make -t命令,可以不重新编译,只是更新目标文件的时间戳,是一个假的编译动作。
  • make -o 文件命令,指定文件使用旧文件,作用是指定文件以及它的所有目标项,都不会被重新编译,即使指定的文件或者它的依赖项已经更新。如functions.h被更新,使用make命令,functions.h的所有目标文件都会被重新编译,使用make -o functions.h,所有它的目标文件不会被重新编译。


浙ICP备17015664号 浙公网安备 33011002012336号 联系我们 网站地图  
@2019 qikegu.com 版权所有,禁止转载