2013-07-25 42 views
1

變量這是我的makefile設置在化妝

file1: 
    uglifyjs myfile1.js -c | gzip -c -9 > myfile1.min.js 

file2: 
    uglifyjs myfile2.js -c | gzip -c -9 > myfile2.min.js 

我怎樣才能改變我的makefile文件去除重複代碼:

file1: 
    FILE=myfile1.js 
    #How to call build target? 

file2: 
    FILE=myfile2.js 

build: 
    uglifyjs $(FILE).js -c | gzip -c -9 > $(FILE).min.js 

我知道我可以使用make build但有另一種方式做這沒有調用遞歸?

回答

1

使用自動變量:

file1 file2: 
     uglifyjs [email protected] -c | gzip -c -9 > [email protected] 

我不知道爲什麼你使用像file1目標時,你實際上正在構建的文件是myfile1.min.js。這不是一個好的makefile。

但是,這不是你問的問題。

+0

因爲我的文件從'myfile.js'到'myfile.min.js',應該如何命名目標? 'myfile'?顯然這是一個例子,但我寧願儘可能地習慣。 – Alan

+0

您的目標應該_always_是您正在創建的文件。如果不是,那麼每次運行make時都會重建該文件(因爲就其所關注的文件而言,它不存在的文件已過期)。如果你只是想讓這些命令總是運行,那麼只需編寫一個包含你的命令的shell腳本,而不用擔心使用make。 – MadScientist

1

使用模式規則來運行命令,然後讓你的目標依賴於文件,你想:

file1: myfile1.min.js 
file2: myfile2.min.js 

%.min.js: %.js 
     uglifyjs $< -c | gzip -c -9 >[email protected] 

模式規則告訴make如何建立從一個名爲.js文件.min.js文件,其他規則告訴它構建特定的文件。