1

我正在使用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它时,它运行没有问题,结果符合预期。

怎么了?

4

1 回答 1

1

GNU make 不支持 Windows 风格的环境变量,例如%pyuic%. 您的第一个示例有效,因为它正在调用 Windows“shell”,并且该 shell 正在为您扩展此值。在您的第二个示例中,GNU make 试图直接调用该命令。这可能被认为是 GNU make 中的一个错误:可能如果 make%在 Windows 的规则中看到 a ,它应该始终使用 Windows shell。

无论如何,你应该使用 GNU make 的变量语法;GNU make 会在启动时导入所有的环境变量,所以你可以将它们称为 make 变量。这更便携,因为显然%pyuic%除了 Windows 之外根本无法运行:

UIC := $(pyuic)
于 2013-07-24T12:14:37.643 回答