Makefile 重新编译

make 程序是一个智能实用程序,它根据我们在源文件中所做的更改工作。 如果你有四个文件 main.cpphello.cppfactorial.cppfunctions.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 标志,它将指定的文件标记为“old”。 这意味着,文件本身不会被重制,也不会以其帐户重制任何其他内容。 你需要遵循这个程序

  • 使用 make -o header file 重新编译因与特定头文件无关的原因而需要编译的源文件。 如果涉及多个头文件,请为每个头文件使用单独的“-o”选项。
  • 使用 make -t 更新所有目标文件。

查看笔记

扫码一下
查看教程更方便