2010-03-23 134 views

回答

24

就像從一個makefile調用任何其他命令:

target: prerequisites 
    shell_script arg1 arg2 arg3 

關於你進一步的解釋:

.PHONY: do_script 

do_script: 
    shell_script arg1 arg2 arg3 

prerequisites: do_script 

target: prerequisites 
+0

但我需要在先決條件 – 2010-03-23 23:47:45

+0

@Matthew之前運行腳本,那麼您的makefile設置不正確。製作一個新的'.PHONY'目標,以滿足您的先決條件,並在該目標中運行該腳本。 – 2010-03-24 00:15:57

+0

爲您的案例編輯更多。 – 2010-03-24 00:17:19

5

每個在makefile規則的行動是,將在執行的命令子shell。您需要確保每個命令都是獨立的,因爲每個命令都將在單獨的子shell中運行。

出於這個原因,你會經常看到換行符逃脫當筆者想要幾個命令在同一子shell中運行:

targetfoo: 
     command_the_first foo bar baz 
     command_the_second wibble wobble warble 
     command_the_third which is rather too long \ 
      to fit on a single line so \ 
      intervening line breaks are escaped 
     command_the_fourth spam eggs beans 
0

也許不是「正確」的方式做到像已經提供的答案,但是我遇到了這個問題,因爲我想讓我的makefile運行我編寫的腳本來生成一個頭文件,該文件將爲整個軟件包提供版本。我在這個軟件包中有很多目標,並且不想爲它們添加全新的先決條件。把它放在我的makefile的開頭爲我工作

$(shell ./genVer.sh) 

它告訴make只是運行一個shell命令。 ./genVer.sh是要運行的腳本的路徑(與makefile相同的目錄)和名稱。無論我指定哪個目標(包括clean,這都是缺點,但最終對我來說不是一個大問題),它都會運行。