我正在使用GnuWin32项目,并创建了一个makefile
来管理一些代码的编译。在命令行中我运行:
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/$@ $^
print_%:
@echo $* = ${$*}
当我运行make print_UIC
时,我得到:
UIC = python "E:\PortableApps\Portable Python 2.7.3.1\App\Lib\site-packages\PyQt4\uic\pyuic.py"
但是当我运行'make main.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 :(得分:1)
GNU make不支持Windows风格的环境变量,例如%pyuic%
。你的第一个例子是有效的,因为它正在调用Windows“shell”,而shell正在为你扩展这个值。在你的第二个例子中,GNU make试图直接调用命令。这可能被认为是GNU make中的一个错误:可能如果make在Windows上的规则中看到%
,它应该总是使用Windows shell。
无论如何,你应该使用GNU make的变量语法; GNU make会在启动时导入所有环境变量,因此您可以将它们称为make变量。这样更便携,因为显然%pyuic%
除了Windows之外什么都不会起作用:
UIC := $(pyuic)