2015-06-22 72 views
0

這可能是一個非常基本的,但我需要調用一個函數中的一個函數,但我無法弄清楚:生成文件調用函數

chmod-prod: 

    chown git:git-R ./ 

composer-dev: 

    [who do I how chmod-prod: within here] 

任何幫助,將不勝感激

回答

3

注意chmod-prodcomposer-dev被稱爲製造術語的目標。

使用目標

如果chmod-prod結果需要composer-dev的「配方」的其餘部分之前發生再做出最自然的方式將其添加爲一個依賴。

composer-dev: chmod-prod 
    [the rest of composer-dev recipe] 

鑑於這兩個目標不會導致產生與其名稱的文件,這將是他們聲明爲.PHONY好的做法:

.PHONY: chmod-prod 
.PHONY: composer-dev 

這確保了目標不會受影響如果有人添加具有相同名稱的文件。

使用可變

另一種途徑是在一個變量存儲命令:

chmod_prod_cmd:=chown git:git-R ./ 

哪位能那麼在這兩個你的目標的食譜中:

composer-dev: 
    $(chmod_prod_cmd) 

composer-dev: 
    $(chmod_prod_cmd) 
    [presumably some more recipe] 

罐裝多行配方

如果你想重用配方位涉及多行,那麼你將需要使用的不是普通的變量賦值的define指令:

define chmod_prod_cmd 
    echo Doing something 
    chown git:git-R ./ 
endef 
+0

使用謝謝您的時間和一個非常詳細的問題。這是完美的,它希望它可以幫助別人。 –

2

假設那些需要是目標(他們序列方式)那麼PeterSW有正確的答案。

如果他們中需要更細粒度的排序composer-dev配方的身體,那麼你可能永遠只是再次運行make(如$(MAKE) chmod-prod),雖然我不建議makefile文件的這種結構,因爲它是昂貴的(說的最小)。

這就是說如果chmod-prod配方體實際上只是一個簡單的單(或系列)外殼命令(不需要運行外部手動即作爲make chmod-prod)的隨後使用make變量/ define代替目標。

像這樣的事情

chmod-prod := chown git:git-R ./ 

或本

define chmod-prod 
    chown git:git-R ./ 
endef 

像這樣

composer-dev: 
     some_command 
     $(chmod-prod) 
     other_command 
+0

謝謝:)真的很有用 –