我有一个命令,它有时会更新目标文件,有时会保持不变,但我不知道会发生哪一个。我想创建一个依赖项,该依赖项应仅在第一个文件更新时运行。我不能这么做。下面是一个简单的Makefile,它再现了这个问题:
all: file2.txt
file1.txt:
@if [ ! -f file1.txt -o $(shell bash -c "expr $$RANDOM % 2") = 1 ];
then
echo "update" >> file1.txt;
echo "file1.txt overwritten";
else
echo "file1.txt is unchanged";
fi
.PHONY: file1.txt
file2.txt: file1.txt
cp file1.txt file2.txt
如果不存在或模2的随机数为1,则file1.txt规则中的测试将生成file1.txt
。如果并且仅当file1.txt
被重写时,我希望看到cp file1.txt file2.txt
被执行。
通过添加您特别告诉的.PHONY
设置,无论目标是什么,都会被认为是过时的,因此您直接与您想要做的事情相矛盾。
您可以使用另一种方法通过";"力目标";,像这样:
FORCE: ;
file1.txt: FORCE
...
并移除CCD_ 5设置。