这似乎是一个非常简单的问题,但我找不到任何方法来解决它。
我的目的是通过调用pyuic4命令(来自PyQt)将每个“.ui”文件转换为“.py”文件。我尝试使用非常短的makefile来管理它:
%.py: %.ui
pyuic4 $< --output $@
这就是我现在所需要的一切。
makefile名为“Makefile”,位于调用“make”的文件夹中,“.ui”文件也是如此。 “pyuic4(.bat)”位于系统的路径中(Windows 7),Unix Utilities也是“make”的一部分。
从Windows控制台运行“make”时,它说:
make: *** No targets. Stop.
使用显式文件名从命令行调用pyuic4。
我知道我可以自己指定任何目标文件,但如果可能的话我想避免这种情况。
有什么想法吗?
答案 0 :(得分:4)
根据kasterma的评论,你需要告诉make要构建哪个目标,但是你只提供了一个模式规则。这可以通过以下方式完成。
UIFILES := $(wildcard *.ui)
PYFILES := $(UIFILES:.ui=.py)
.PHONY: all
all: $(PYFILES)
%.py: %.ui
pyuic4 $< --output $@
答案 1 :(得分:1)
由于您显然使用的是GNU Makefile语法,我建议您按照以下方式编写规则:
UIFILES = $(wildcard *.ui)
.PHONY: ui2py
ui2py: $(UIFILES)
@for uifile in $(UIFILES); do \
pyuic4 $$(uifile) --output $${uifile%.ui}.py; \
done
答案 2 :(得分:1)
虽然问题可以通过perror或eriktous'解决方案来解决,但现在我只是通过简单地使用shell脚本调用pyuic4命令来进行eriktous提到的第三种方式。它的运行速度非常快,即使输出结果相同,也不会对源代码控制造成任何伤害。
我遇到了第二点,这可能会分散我的注意力。 pyuic4命令实际上名为pyuic4.bat,它是Windows中的“批处理文件”,类似于Linux / Unix环境中的shell脚本;相似,但不完全相同。如果从另一个批处理文件调用批处理文件,则应使用前导“call”语句调用该批处理文件,以防止在第一次调用后终止批处理。
如果我有三个文件(@符号是为了防止在执行期间列出命令)
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
这不是我最初想要的,但它对我有用。
但无论如何,谢谢你的帮助: - )