2013-07-24 44 views
1

我正在使用GnuWin32項目,並創建了makefile來管理某些代碼的編譯。在命令行我運行:無法使用之前定義的var的

set PYUIC=python "E:\PortableApps\Portable Python 2.7.3.1\App\Lib\site-packages\PyQt4\uic\pyuic.py" 

我make文件包含以下內容:

UIC := %pyuic% 
HELP_VIEW := less 

vpath %.ui ./ui 
vpath %.py ./py 

.PHONY: help 

help: 
    ${HELP_VIEW} help 

%.py: %.ui 
    ${UIC} -o ./py/[email protected] $^ 

print_%: 
    @echo $* = ${$*} 

當我運行make print_UIC我得到:

UIC = python "E:\PortableApps\Portable Python 2.7.3.1\App\Lib\site-packages\PyQt4\uic\pyuic.py" 

但是當我執行「make爲主。 PY」我得到:

%pyuic% -o ./py/main.py ./ui/main.ui 
process_begin: CreateProcess(NULL, %pyuic% -o ./py/main.py ./ui/main.ui, ...) fa 
iled. 
make (e=2): The system cannot find the file specified. 
make: *** [main.py] Error 2 

當我運行%pyuic% -o ./py/main.py ./ui/main.ui它運行沒有問題,結果如預期。

怎麼了?

+0

我以爲變量用括號包圍 – CBIII

回答

1

GNU make不支持Windows風格的環境變量,如%pyuic%。你的第一個例子工作是因爲它調用了Windows的「shell」,並且shell正在爲你擴展這個值。在你的第二個例子中,GNU make試圖直接調用該命令。這可能被認爲是GNU make中的一個錯誤:如果在Windows的規則中看到%,它應該總是使用Windows shell。

無論如何,你應該使用GNU make的變量語法; GNU make將在啓動時導入所有環境變量,因此您可以將它們稱爲make變量。這是更便攜,因爲顯然%pyuic%不會在所有的事情上工作,但Windows系統:

UIC := $(pyuic) 
相關問題