我正在尝试从我的命令行使用下面的 makefile 运行 make
。然后我收到以下错误 make: nothing can be done for all
。 makefile 的内容如下。
GENERATED_FILES = \
dw.js/dw-2.0.js \
www/static/css/datawrapper.css \
www/static/css/chart.base.css
all: $(GENERATED_FILES)
clean:
rm -f -- $(GENERATED_FILES)
dw.js/dw-2.0.js: dw.js/src/*.js
cd dw.js
grunt
assets: www/static/css/datawrapper.css www/static/css/chart.base.css
# www/static/js/dw-2.0.js: dw.js/dw-2.0.js
# @cp dw.js/dw-2.0.js www/static/js/
# www/static/js/dw-2.0.min.js: dw.js/dw-2.0.js
# @php -r "require 'vendor/autoload.php'; file_put_contents('www/static/js/dw-2.0.min.js', \JShrink\Minifier::minify(file_get_contents('dw.js/dw-2.0.js')));"
messages:
scripts/update-messages.sh
www/static/css/datawrapper.css: assets/styles/datawrapper/* assets/styles/datawrapper/**/*
node_modules/.bin/lessc assets/styles/datawrapper/main.less > $@
www/static/css/chart.base.css: assets/styles/chart.base/*
node_modules/.bin/lessc assets/styles/chart.base/main.less > $@`
最佳答案
最有可能发生的情况是您尝试生成的文件已经存在。为什么这会阻止 make 命令构建您的文件?这是因为 make
解释 makefile 的方式。
让我们看看下面的通用 makefile 规则并手动解释它。
target: prerequistes
actions
make target
将检查文件 target
的时间戳并将其与所有必备文件的时间戳进行比较。如果任何先决条件的时间戳比目标更新(即其中一个先决条件“更年轻”),则将执行 actions
。
因此,如果先决条件
已经完成并且所有具有相同时间戳的target
,那么make
将写入消息make: 不能为target
因此,您可以做两件事。最好的办法是确保您尝试生成的文件不存在。另一种解决方案是运行 make -B target
这将导致 make
to always make your targets
关于linux - 制作 : nothing can be done for all,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30232870/