我有以下形式的Makefile:
intermediate.file: base.file
# make stuff
target.file: intermediate.file
# make stuff
现在,我只希望make
(重新)构建target.file,如果它不存在(或者如果我传递-B),因为这些步骤可能需要很长时间。
我如何make this happen
?
答案 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
)