2010-06-16 33 views
2

我希望在我的GNUmakefile中有一個調用新shell的目標規則,然後用新shell的clean slate調用新make。如何調用一個shell來創建一個新的環境在另一個make中運行make?

這是什麼語法?

我試過,但沒有奏效:

.PHONY: setup 
setup: 
shell cd myDir; make; cd .. 

它得到以下錯誤的無限重複:

make[1]: Entering directory `/disk4/home/user/parent' 
shell cd myDir; make; cd .. 
/bin/sh: shell: command not found 
make[1]: Entering directory `/disk4/home/user/parent' 
shell cd myDir; make; cd .. 
/bin/sh: shell: command not found 
[...] 

回答

1

的括號是沒有必要的。無論如何,配方中的每一行都在其自己的shell中調用。你的食譜似乎有一個多餘的外殼字符串,你的外殼試圖執行命令(/ bin/sh(你的外殼,不是),抱怨shell: command not found)。

另外,在這種情況下,make的-C參數很方便。

而且,從shell調用make時,請使用${MAKE}宏。

.PHONY: setup 
setup: 
    unset MAKEFLAGS; ${MAKE} -C myDir 
2
(cd myDir ; make) 

的括號調用一個新的子shell,有自己的「當前目錄」。

+0

新的子shell正在繼承父項,因爲(cd myDir; make)的行爲與使用此規則進行設置時從頂部從頂部調用它不同。 – WilliamKF 2010-06-16 01:58:02

+1

是的,它會繼承所有導出的變量。如果你想阻止這個,使用'env'。 – 2010-06-16 02:23:22

+0

請詳細說明如何使用env。不知何故,它是'env -i'嗎? – WilliamKF 2010-06-16 03:54:48

0

這裏是什麼在起作用:

.PHONY: setup 
setup: 
(cd myDir; env --unset=MAKEFLAGS make) 
相關問題