只需要执行一次的makefile目标
makefile goal that only needs to be executed once
我想从目录中的 a.tar.gz
生成 a.txt
。我尝试在 Makefile 中编写以下目标:
a.txt: a.tar.gz
tar xvf a.tar.gz
这有效,但在 运行 压缩一次后 a.tar.gz
被解压缩并且不再存在。随后 make
失败。我如何编写一个目标来检查 a.txt
是否不存在,如果存在 运行 tar
,否则什么都不做?
'test' 或“[”和“]”可以做到这一点。
a.txt:
if [ -e a.tar.gz ]; then \
tar xvf a.tar.gz \
fi
wildcard
只会扩展到至少能找到一个文件的内容:
a.txt: $(wildcard a.tar.gz)
tar xvmf $<
添加 m
标志将避免不必要的重制。
如果这两个文件都不存在,则该规则将失败,但如果不知道您到底要做什么,就很难提供全面的解决方案。
我想从目录中的 a.tar.gz
生成 a.txt
。我尝试在 Makefile 中编写以下目标:
a.txt: a.tar.gz
tar xvf a.tar.gz
这有效,但在 运行 压缩一次后 a.tar.gz
被解压缩并且不再存在。随后 make
失败。我如何编写一个目标来检查 a.txt
是否不存在,如果存在 运行 tar
,否则什么都不做?
'test' 或“[”和“]”可以做到这一点。
a.txt:
if [ -e a.tar.gz ]; then \
tar xvf a.tar.gz \
fi
wildcard
只会扩展到至少能找到一个文件的内容:
a.txt: $(wildcard a.tar.gz)
tar xvmf $<
添加 m
标志将避免不必要的重制。
如果这两个文件都不存在,则该规则将失败,但如果不知道您到底要做什么,就很难提供全面的解决方案。