Makefile - 重新编译

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 假设头文件中的任何更改都需要重新编译所有依赖文件,但您知道它们不需要重新编译,您宁愿不浪费时间等待它们编译。

如果您在更改头文件之前预见到问题,则可以使用 `-t' 标志。此标志告诉 make 不要运行规则中的命令,而是通过更改其最后修改日期将目标标记为最新。您需要遵循此过程 −

  • 使用命令"make"重新编译真正需要重新编译的源文件。

  • 在头文件中进行更改。

  • 使用命令"make -t"将所有目标文件标记为最新。下次运行 make 时,头文件中的更改不会导致任何重新编译。

如果您在某些文件确实需要重新编译时已经更改了头文件,那么这样做已经太晚了。相反,您可以使用"-o file"标志,将指定文件标记为"旧"。这意味着,文件本身将不会被重新制作,并且不会为其帐户重新制作任何其他内容。您需要遵循此过程 −

  • 使用"make -o header file"重新编译由于与特定头文件无关的原因而需要编译的源文件。如果涉及多个头文件,请为每个头文件使用单独的"-o"选项。

  • 使用"make -t"更新所有目标文件。