我可以区分强制重建目标的依赖项和那些只允许重建目标的依赖项吗?

时间:2014-03-14 21:48:26

标签: build makefile

是否有任何构建系统允许我们创建不同的"级别"依赖?让我们称呼他们"必要"和"可选" (虽然我知道一些系统对于#34;可选依赖")具有特殊含义。这个想法是允许正常的增量重建和完全重建之间的东西。

A"必需"依赖只是一个普通的makefile依赖。如果更改了依赖关系的时间戳,则会重建目标。如果您键入" make"什么都没有过时,没有任何反应。

"可选"依赖性会说某些目标的输入已经改变,而可以可以重新编译,但目标实际上并不是无效的。

例如,让我们说我在一堆DLL上运行配置文件引导的优化(PGO)。从技术上讲,对代码的任何部分的任何更改都可能使配置文件结果无效,因此我可能想要重新运行PGO。但是,只要所有硬依赖项都已更新,如果我不这样做,程序将完全正确运行。这可能很好,因为PGO可能需要一段时间才能运行。

当然,今天我可以通过从" all"中排除PGO来解决这个问题。目标,并手动调用"制作PGO"如果我想运行它。或者,我可以简单地省略PGO目标的大部分依赖关系,以确保它仅在" make clean之后构建。"但是,这是手动工作,不易推广。

仅重建那些必需依赖项已过期的目标,以及" make -optional"重建任何(或明显需要的)依赖项已过期的目标。

是否有任何构建系统或整齐的makefile技巧支持这种行为?

1 个答案:

答案 0 :(得分:1)

如果你愿意,你可以自己动手。如果将OPTIONAL=true添加到命令行:

make OPTIONAL=true

然后在makefile中,您可以测试OPTIONAL并在设置该变量时向目标添加先决条件,或者如果不是则添加它们。

我知道没有make(至少)版本可以通过命令行选项使这种东西可用。