2015-05-14 74 views
0

我試圖在命令行中使用下面的makefile運行make。然後我收到以下錯誤make: nothing can be done for all。下面給出了makefile的內容。make:無法爲所有人完成

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 > [email protected] 

www/static/css/chart.base.css: assets/styles/chart.base/* 
    node_modules/.bin/lessc assets/styles/chart.base/main.less > [email protected]` 

回答

1

什麼是最有可能發生的是,你試圖生成的文件已經存在。爲什麼這會阻止make命令構建你的文件?這是因爲make解釋makefile。

讓我們看看下面的一個通用makefile規則並手動解釋它。

target: prerequistes 
    actions 

make target將檢查和文件target的時間戳比較了所有必需的文件的時間戳。如果任何先決條件具有比目標更近的時間戳(即,其中一個先決條件是「更年輕」),則將執行actions

所以,如果prerequisites已經制成,都具有相同的時間戳記target,然後make會寫消息化妝:沒有什麼可以target

這樣做,你可以做兩件事情。最好的辦法是確保你試圖生成的文件不存在。另一種解決方案來運行make -B target這將導致maketo always make your targets

Please read this question too for reference