2014-04-28 47 views
0

我有這個makefile生成文件的源文件的更新不會傳播到目標

jade = ./node_modules/.bin/jade 
    nlz = ./node_modules/.bin/nlz 

    build: build/index.js build/index.css build/index.html build/docs.html 

    build/index.js: $(find client/*.js) 
     $(nlz) build client/index.js 

    build/index.css: $(find client/*.css) 
     $(nlz) build client/index.css 

    build/index.html: pages/home.jade pages/layout.jade 
     $(jade) --path pages/home.jade <pages/home.jade> build/index.html 

    build/docs.html: pages/docs.jade pages/layout.jade 
     $(jade) --path pages/docs.jade <pages/docs.jade> build/docs.html 

    node_modules: 
     npm install 

    clean: 
     rm -rf build 

    .PHONY: clean 

然而,當我更新.js.css文件之一,打字make build給我make: Nothing to be done for build'.`。我究竟做錯了什麼?

+2

你應該加上'build'到'.PHONY'目標清單。 – arkascha

+0

然後我失去了makefile的好處。絕對可怕的建議 –

回答

1

有沒有這樣的功能​​。

由於它不是一個已知的函數,所以make認爲它是一個從未設置過的奇怪命名的變量,因此沒有值:因此,build/index.cssbuild/index.js沒有先決條件。所以只要它們存在,它們就被認爲是最新的。

也許你想:

build/index.js: $(wildcard client/*.js) 
     $(nlz) build client/index.js 

build/index.css: $(wildcard client/*.css) 
     $(nlz) build client/index.css 
+0

謝謝!我想它的作品創造增值稅,但不作爲源目標 –

+1

我不知道你的意思; '$(find ...)'在GNU make的任何地方都無法運行。這不是一個有效的功能。也許你正在運行'$(shell find ...)',它可以工作,但不是你所能看到的。 – MadScientist

+0

啊是的。也許我正在運行shell查找。謝謝 –

相關問題