Makefile:如何使用随机生成文件或保持不变的命令



我有一个命令,它有时会更新目标文件,有时会保持不变,但我不知道会发生哪一个。我想创建一个依赖项,该依赖项应仅在第一个文件更新时运行。我不能这么做。下面是一个简单的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设置。

最新更新