【发布时间】:2014-01-29 13:51:03
【问题描述】:
我已经厌倦了等待我们的构建将依赖文件与目标文件分开,因此我尝试将我们的构建切换为使用 -MMD 在构建 .o 文件时制作 .d 文件。
这很好用并且将我们的构建时间缩短了一半,但是因为我没有规则来制作一个 .d 文件,如果它们不存在,make 会忽略它们并且不重建目标文件。我们的要求之一是如果依赖文件不存在我们重建它们,显然我们不喜欢“不要删除依赖文件”的解决方案。所以,是的,我们正在研究您成功构建基线然后一怒之下随机删除依赖文件并且懒得进行 make clean 的情况。
如果 .d 文件不存在,我如何告诉 make 重建 .o 文件?当我使 .d 依赖于 .o 时,我得到“没有规则来制作目标 xyz.d”。
【问题讨论】:
-
所以制定一个规则来生成.d文件。一些 make 程序足够聪明,可以在 .d 更改后重新加载 makefile 中的包含。
-
.d 文件是带有 -MMD 标志的 .o 文件的副产品。如果我分别制作它们,那么编译时间会加倍,因为它必须先制作 .d 文件,然后再制作 .o 文件。
-
我们使用“gcc -M *.cpp > .depend”然后“include .depend”
-
这是在构建目标文件的单独步骤中构建依赖文件,从而使编译时间加倍。使用 -MMD 的目的是一步构建。
-
有些厂商有办法说一条规则生成 2 个文件。使用原始制作就像“foo.o foo.d : foo.cpp”
标签: c++ compilation makefile g++