1

这似乎是一个非常简单的问题,但我找不到任何方法来解决它。

我的意图是通过调用 pyuic4 命令(来自PyQt)将每个“.ui”文件转换为“.py”文件。我试图用一个非常短的makefile来管理它:

%.py: %.ui
    pyuic4 $< --output $@

这就是我目前所需要的。

makefile 名为“Makefile”,位于调用“make”的文件夹中,“.ui”文件也是如此。“pyuic4(.bat)”位于系统路径(Windows 7)中,“make”所在的Unix Utilities也是如此。

从 Windows 控制台运行“make”时,它会显示:

make: *** No targets.  Stop.

从命令行使用显式文件名调用 pyuic4 是可行的。

我知道我可以自己指定任何目标文件,但如果可能的话,我想避免这种情况。

有任何想法吗?

4

3 回答 3

4

根据 kasterma 的评论,您需要告诉 make 要构建哪个目标,但您只提供了一个模式规则。这可以通过以下方式完成。

UIFILES := $(wildcard *.ui)
PYFILES := $(UIFILES:.ui=.py)

.PHONY: all
all: $(PYFILES)

%.py: %.ui
    pyuic4 $< --output $@
于 2013-04-05T11:21:10.687 回答
1

由于您显然使用的是 GNU Makefile 语法,我建议您这样编写规则:

UIFILES = $(wildcard *.ui)

.PHONY: ui2py

ui2py: $(UIFILES)
        @for uifile in $(UIFILES); do \
                pyuic4 $$(uifile) --output $${uifile%.ui}.py; \
        done
于 2013-04-05T09:42:12.607 回答
1

虽然问题可以通过 perror 或 eriktous 的解决方案来解决,但我现在采用 eriktous 提到的第三种方式,只需使用 shell 脚本调用 pyuic4 命令。它的运行速度非常快,即使输出会产生相同的文件,也不会对源代码控制造成任何损害。

我遇到了第二点,这可能让我分心。pyuic4命令真正命名为pyuic4.bat,是Windows中的“批处理文件”,类似于Linux/Unix环境下的shell脚本;相似,但不相同。如果从另一个批处理文件调用批处理文件,则应使用前导“调用”语句调用它,以防止在第一次调用后终止批处理。

如果我有三个文件(@符号是为了防止在执行过程中列出命令)

D:\Projekte\test>type main.cmd
@sub1
@sub2

D:\Projekte\test>type sub1.cmd
@echo This is sub 1

D:\Projekte\test>type sub2.cmd
@echo This is sub 2

...结果只是

D:\Projekte\test>main
This is sub 1

所以我对这个非常小的东西的“解决方案”是一个名为“update.cmd”的简单批处理文件,可以通过以下行的副本进行扩展:

call pyuic4 mainwindow.ui --output mainwindow.py

这不是我最初想要的,但它对我有用。

但无论如何,谢谢你的帮助:-)

于 2013-04-08T06:14:12.060 回答