虚假目标不应该是真实目标文件的先决条件;如果是,则每次
make
更新该文件时都会运行其配方。
如果那是我想要的呢?
例如,如果我有一个名为lint
lints的虚假目标app/scripts/main.js
,并且我希望它在每次make
更新(transpile & minify)时运行,该dist/scripts/main.js
怎么办?
我刚刚删除了lint
目标并将其配方作为目标配方的第一个命令dist/scripts/main.js
。
dist/scripts/main.js : app/scripts/main.js
./node_modules/.bin/eslint $< && \
mkdir -p dist/scripts && \
./node_modules/.bin/babel $< | \
./node_modules/.bin/uglifyjs - --screw-ie8 -o $@ -m -c
更新的答案:当前的 GNU make 手册没有从问题中指定引用的“规则”,而是明确表示在关于强制目标的条目中使用这个,其中包括一个注释:
如您所见,使用
FORCE
这种方式与使用.PHONY clean
.使用
.PHONY
更加明确和高效。但是,其他版本的 make 不支持.PHONY
; 因此FORCE
出现在许多makefile中