【发布时间】:2014-01-11 13:10:04
【问题描述】:
我有一个 Makefile 系统,它可以动态生成规则来为不同平台构建文件列表。由于各种原因,不能使用隐式规则,因为没有可应用的通用模式,而是各种函数在文件列表上的输出。
现在我正在尝试以一种仅针对需要构建的目标触发的方式添加自动依赖生成。执行此操作的常规方法是定义生成依赖项的隐式规则,然后包含或定义需要这些依赖项作为同一目标的先决条件的显式规则(参见http://mad-scientist.net/make/autodep.html 示例)。这是可行的,因为 make 会自动使用相同规则的显式版本覆盖隐式规则而不会抱怨。
但是,由于我没有使用隐式规则的选项,我正试图找出一种方法来做到这一点。我只看到两种方法:
- 动态重写显式规则并为每个规则获取“警告:覆盖目标命令”。
- 想办法让 Make 删除现有的规则定义,以便我提供新的规则定义。
由于 AFAIK 无法执行第二个选项,有人知道我如何抑制“目标的覆盖命令”警告吗?关于覆盖显式规则并使用新的先决条件再次评估它们的任何其他建议?
【问题讨论】:
-
一个 makefile 可以按预期工作,只有显式规则,没有隐式规则。你能提供一个简单的例子来说明你正在尝试做什么吗?
-
例如,这个但没有模式规则:mad-scientist.net/make/autodep.html#norule 不一定使用 makedepend,而是任何方式为相同目标生成具有正确依赖关系的新规则。在此示例中,这是通过以下包含完成的。
-
虽然您的构建系统很可能需要复杂的自动依赖机制,就像您提供的链接所描述的那样,但您可能不需要——我个人看到了很多非常糟糕的解决方案
make的感知缺陷和跨平台问题——即“便携”——在过去 35 年左右(Imake,有人吗?)。您能否提供一个或两个显式目标依赖规则片段示例来演示您需要做什么?此外,是否所有构建都在 Unix/Linux/Mac OS X 上执行,或者是否有其他构建平台使用make,但没有完整的 Unix 工具集?
标签: makefile