2012-01-25 46 views
1

我正在嘗試學習在我的應用程序中創建和構建一個Makefile以幫助我構建和最小化稍後使用組合加載器服務器應用程序的我的.js文件。已建立/最小化已更改的JS文件

我試圖完成的是,當我運行make時,它將複製到build目錄中,只有自上次運行後發生更改的.js文件,然後縮小該文件並生成-min .js複製。最後,我需要始終確保生成一個新的meta.js文件。

我已經粘貼了我在下面的工作,這樣做的麻煩在於它不是隻選擇已更改的.js文件,而是每次運行時都選擇每個文件。我錯過了如何讓Make在這個實例中只選擇已更改的文件。

BOOKIE_JS = bookie/static/js/bookie 
JS_BUILD_PATH = bookie/static/js/build 
JS_META_SCRIPT = scripts/js/generate_meta.py 

jsbuild: $(JS_BUILD_PATH)/bookie/meta.js 

clean_js: 
    rm -rf $(JS_BUILD_PATH)/* 

$(JS_BUILD_PATH)/bookie/meta.js: $(BOOKIE_JS)/y*-min.js 
    $(JS_META_SCRIPT) -n YUI_MODULES -s $(BOOKIE_JS)/y* -o $(JS_BUILD_PATH)/bookie/meta.js 

$(BOOKIE_JS)/y*-min.js: $(BOOKIE_JS)/y*.js 
    scripts/js/jsmin_all.py $(JS_BUILD_PATH)/bookie 

    # this is the part that runs for each .js file and I'd like it to only run for the *modified* files 
$(BOOKIE_JS)/y*.js: $(JS_BUILD_PATH)/bookie 
    cp [email protected] $(JS_BUILD_PATH)/bookie/ 

$(JS_BUILD_PATH)/bookie: 
    mkdir $(JS_BUILD_PATH)/bookie 

clean: clean_js 

.PHONE: clean clean_js 

電流輸出:

cp bookie/static/js/bookie/yapi.js bookie/static/js/build/bookie/ 
cp bookie/static/js/bookie/ymodel.js bookie/static/js/build/bookie/ 
cp bookie/static/js/bookie/ytagcontrol.js bookie/static/js/build/bookie/ 
cp bookie/static/js/bookie/yview.js bookie/static/js/build/bookie/ 
scripts/js/jsmin_all.py bookie/static/js/build/bookie 
scripts/js/generate_meta.py -n YUI_MODULES -s bookie/static/js/bookie/y* -o bookie/static/js/build/bookie/meta.js 

我想看到的僅僅是修改過的文件的CP。

回答

3

我想你打算做一個pattern rule但使用了錯誤的語法。例如,這樣的:

$(BOOKIE_JS)/y*-min.js: $(BOOKIE_JS)/y*.js 
    scripts/js/jsmin_all.py $(JS_BUILD_PATH)/bookie 

意味着每個$(BOOKIE_JS)/y*-min.js文件依賴於$(BOOKIE_JS)/y*.js文件 - 所有的人,而不僅僅是一個具有類似名稱的。如果你這樣做:

$(BOOKIE_JS)/y%-min.js: $(BOOKIE_JS)/y%.js 
    scripts/js/jsmin_all.py $(JS_BUILD_PATH)/bookie 

那麼%必須每邊相同的字符串替換,所以例如$(BOOKIE_JS)/yapi-min.js只取決於$(BOOKIE_JS)/yapi.js

+0

感謝,完全錯過了* VS% – Rick