用于具有不同先决条件的 2 个目标的 Makefile,但使用单个命令即可生成两个目标

问题描述 投票:0回答:1

有 2 个目标,每个目标都有特定的先决条件和一个命令来构建它们,我们可以使用这个 makefile

a.target: a.req
    build_a_and_b

b.target: b.req
    build_a_and_b

但是如果需要构建 2 个目标,该命令将运行两次。

我发现最近 make 它存在分组目标,考虑到生成多个目标的命令:

a.target b.target &: a.src b.src
    build_a_and_b

这解决了上述问题,但引入了一个新的异常:如果没有目标已过时,但

a.src
b.target
更新,则命令在不应该运行的情况下运行,因为
b.target
仅依赖于
b.src
。 当然,切换a和b角色时也存在同样的错误。

当目标仅比其自己的源旧时,如何才能仅执行一次命令?

makefile
1个回答
0
投票

不幸的是,无法对分组目标执行此操作。 对于分组目标,两个目标的所有先决条件都会组合在一起,无论您如何定义它们。

如果您不关心并行构建,您可以简单地定义两个规则,运行的第一个规则将更新另一个规则,然后 make 将看到第二个规则已经更新并且不会再次运行配方。

如果您想要并行构建,那么这是不可能的,因为 make 知道不要同时构建两者的唯一方法是它们是否链接在一起,并且当它们链接在一起时您会得到这个结果。 至少,我想不出有什么办法可以避免。

© www.soinside.com 2019 - 2024. All rights reserved.