Makefile – 重新编译
make 程序是一个智能工具,它根据你在源文件中的改动来工作。如果你有四个文件main.cpp、hello.cpp、factorial.cpp和function.h,那么所有其余的文件都依赖于function.h,而main.cpp依赖于hello.cpp和factorial.cpp。因此,如果你对 functions.h 做了任何修改,那么 make 会重新编译所有的源文件以生成新的对象文件。然而,如果你对main.cpp做了任何修改,因为它不依赖于任何其他文件,那么只有main.cpp文件被重新编译,而help.cpp和factorial.cpp不被编译。
在编译一个文件时, make 会检查其对象文件并比较时间戳。如果源文件的时间戳比对象文件的时间戳要新,那么它就会生成新的对象文件,假定源文件已经被修改。
避免重新编译
可能有一个由成千上万的文件组成的项目。有时你可能已经改变了一个源文件,但你可能不想重新编译所有依赖它的文件。例如,假设你在头文件中增加了一个宏或一个声明,而其他文件都依赖于它。为了保守起见, make 假设头文件的任何改变都需要重新编译所有的依赖文件,但你知道它们不需要重新编译,你宁愿不浪费时间等待它们编译。
如果你在修改头文件之前就预见到了这个问题,你可以使用 “t “标志。这个标志告诉 make 不要运行规则中的命令,而是通过改变目标文件的最后修改日期来标记其为最新版本。你需要遵循这个程序–
- 使用`make’命令重新编译真正需要重新编译的源文件。
-
对头文件进行修改。
-
使用命令`make -t’将所有对象文件标记为最新的。下次你运行make时,头文件中的修改不会引起任何重新编译。
如果你已经在一些文件确实需要重新编译的时候修改了头文件,那么再这样做就太晚了。相反,你可以使用 “o file “标志,它将指定的文件标记为 “旧”。这意味着,该文件本身不会被重新编译,其他文件也不会被重新编译。你需要遵循这个程序—-。
-
用 “make -o header file “重新编译那些由于独立于特定头文件的原因需要编译的源文件。如果涉及几个头文件,对每个头文件使用单独的`-o’选项。
-
用 “make -t “更新所有的目标文件。