【问题标题】:make: nothing can be done for allmake:无能为力
【发布时间】:2015-05-14 08:39:56
【问题描述】:

我正在尝试从我的命令行使用下面的 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 > $@`

【问题讨论】:

    标签: linux windows ubuntu makefile


    【解决方案1】:

    最有可能发生的是您尝试生成的文件已经存在。为什么这会阻止 make 命令构建你的文件?这是因为 make 解释 makefile 的方式。

    让我们看看下面的通用 makefile 规则并手动解释它。

    target: prerequistes
        actions
    

    make target 将检查文件target 的时间戳并将其与所有必备文件的时间戳进行比较。如果任何先决条件的时间戳比目标的时间戳更新(即先决条件之一是“更年轻”),则将执行 actions。

    所以,如果prerequisites 已经生成并且所有时间戳都具有相同的时间戳,则target,那么make 将写入消息ma​​ke: nothing can be done for target

    所以,你可以做两件事。最好的办法是确保您尝试生成的文件不存在。另一种解决方案是运行make -B target,这将导致maketo always make your targets

    Please read this question too for reference

    【讨论】:

      猜你喜欢
      • 2020-03-25
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-21
      • 1970-01-01
      相关资源
      最近更新 更多