2010-09-06 96 views
2

我想了解一个makefile如何编译一些.ui文件到.py(PyQt - > Python)。这是我使用的是自动生成生成文件:如何理解makefile和python

# Makefile for a PyQGIS plugin 
UI_FILES = Ui_UrbanAnalysis.py 

RESOURCE_FILES = resources.py 

default: compile 
    compile: $(UI_FILES) $(RESOURCE_FILES) 

%.py : %.qrc 
    pyrcc4 -o [email protected] $< 

%.py : %.ui 
    pyuic4 -o [email protected] $< 

当我键入:

$ make 

我得到以下信息:

make: *** No rule to make target `compile', needed by `default'. Stop. 

我在做什么错误?

谢谢。

回答

2

不,我知道你正在努力实现构建步骤,但是这两个行:

default: compile 
    compile: $(UI_FILES) $(RESOURCE_FILES) 

样子目标线,因此他们也许应该是:

default: compile 

compile: $(UI_FILES) $(RESOURCE_FILES) 

因为它was make很可能试图将compile:...行解释为一个不会执行任何操作的行为意味着没有compile目标。


一件事,你可能想使用

PHONY: default compile 

告诉做,这些都是抽象的指标,并不代表文件。只是一个良好的做法。

+1

是的! OP需要非常小心makefile中的空白 - 对于make的某些版本,即使是在目标行下方的行上自己的标签也会导致问题。 – 2010-09-06 10:23:56

+0

谢谢 - 解决了这个问题。 “抽象目标”是什么意思?我刚刚开始了解makefile是如何工作的,因此我对术语不熟悉 – djq 2010-09-06 10:31:51

+1

@celenius:考虑make clean。没有文件称为“干净”,也没有期望会有一个。这是一个抽象目标。与'make resources.py'相反,make会检查* file *“resources.py”是否比其所有依赖关系更新,如果不是,尝试(重新)创建*文件*。 – dmckee 2010-09-06 16:13:40