make 程序是一个智能实用程序,它基于您在源文件中所做的更改而工作.如果你有四个文件main.cpp,hello.cpp,factorial.cpp和functions.h,那么所有剩下的文件都依赖于functions.h,而main.cpp依赖于hello.cpp和factorial.cpp.因此,如果您在functions.h中进行任何更改,则 make 将重新编译所有源文件以生成新的目标文件.但是,如果在main.cpp中进行任何更改,因为这不依赖于任何其他文件,则只重新编译main.cpp文件,而不是help.cpp和factorial.cpp.
编译文件时, make 检查其目标文件并比较时间戳.如果源文件具有比目标文件更新的时间戳,则它会生成新的目标文件,假设源文件已更改.
避免重新编译
可能有一个由数千个文件组成的项目.有时您可能更改了源文件,但您可能不想重新编译依赖它的所有文件.例如,假设您向头文件添加宏或声明,其他文件依赖于该头文件.保守, make 假设头文件中的任何更改都需要重新编译所有相关文件,但是您知道它们不需要重新编译,您宁愿不浪费时间等待它们进行编译./p>
如果在更改头文件之前预测到问题,可以使用`-t'标志.此标志告诉 make 不要运行规则中的命令,而是通过更改其上次修改日期来标记目标.您需要遵循以下过程 :
使用命令`make'重新编译真正需要重新编译的源文件.
在标题文件中进行更改.
使用命令`make - t'将所有目标文件标记为最新.下次运行make时,头文件中的更改不会导致任何重新编译.
如果您已经更改了头文件在某些文件确实需要重新编译的时候,要做到这一点为时已晚.相反,您可以使用`-o file'标志,该标志将指定文件标记为"旧".这意味着,文件本身不会被重新制作,其他任何内容都不会在其帐户上重新制作.你需要按照这个程序 :
重新编译需要编译的源文件,原因与特定头文件无关,用`make -o header file'.如果涉及多个头文件,请为每个头文件使用单独的`-o'选项.
使用`make -t'更新所有目标文件.