制作:跳过艰难的步骤

时间:2018-01-06 19:39:04

标签: gnu-make

我有以下形式的Makefile:

intermediate.file: base.file
    # make stuff

target.file: intermediate.file
    # make stuff

现在,我只希望make(重新)构建target.file,如果它不存在(或者如果我传递-B),因为这些步骤可能需要很长时间。

我如何make this happen

3 个答案:

答案 0 :(得分:0)

如果需要构建target.file,这只会构建intermediate.file。仍然不太确定这是否是你正在寻找的......

target.file: base.file
    # build intermediate.file
    # build target.file

答案 1 :(得分:0)

以给定的形式

intermediate.file: base.file
    # make stuff

target.file: intermediate.file
    # make stuff

make只有在命令行(target.file)上明确指定时才构建make target.file,因为它不是make遇到的第一条规则。如果您有另一个目标,该目标位于依赖关系树的较高位置(取决于target.file)并且在您的文件中位于第一位,则可以使target.file成为仅限订单的先决条件。在这种情况下,我会使用shell命令警告您从旧版本构建:

final_target: | target.file
    if [ "intermediate.file" -nt "target.file" ]; then echo "Warning: building from an outdated version of target.file!!!"; fi
    touch final_target

intermediate.file: base.file
    # make stuff

target.file: intermediate.file
    # make stuff

答案 2 :(得分:0)

您可以使用.SECONDARY特殊目标。

它告诉make文件是中间文件,并且只有在需要时才允许重建它(例如,如果它自己的先决条件比指定它作为先决条件的目标更新)。

您的makefile将如下所示:

intermediate.file: base.file
    # make stuff

target.file: intermediate.file
    # make stuff
.SECONDARY: intermediate.file

GNU Make的相关文档:

Special Targets  (.INTERMEDIATE.SECONDARY

Chained Rules