2010-09-06 7 views
2

J'essaie de comprendre comment fonctionne un makefile pour compiler certains fichiers .ui en .py (PyQt -> Python). Ceci est le makefile que je me sers qui a été généré automatiquement:Comment comprendre les fichiers makefiles et 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] $< 

Quand je tape:

$ make 

Je reçois le message suivant:

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

Qu'est-ce que je fais mal?

Merci.

Répondre

2

Non que je connais les étapes de construction que vous essayez d'atteindre, mais ces deux lignes:

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

ressemblent à des lignes cibles, donc ils devraient probablement:

default: compile 

compile: $(UI_FILES) $(RESOURCE_FILES) 

Comme était make essayait probablement d'interpréter la ligne compile:... comme une action qui ne fera rien et signifie qu'il n'y a pas de cible compile.


Une chose, vous pouvez utiliser

PHONY: default compile 

dire faire que ce sont des cibles abstraites et ne représentent pas les fichiers. Juste comme une question de bonne pratique.

+1

Oui! L'OP doit faire très attention aux espaces dans les fichiers makefiles - pour certaines versions de make, même un onglet sur la ligne en dessous d'une ligne cible peut causer des problèmes. –

+0

Merci - cela a résolu le problème. Qu'entendez-vous par «cibles abstraites»? Je commence juste à comprendre comment fonctionnent les fichiers makefile donc je ne suis pas familier avec la terminologie – djq

+1

@celenius: Considérez 'make clean'. Il n'y a pas de fichier appelé "clean" et pas d'attente qu'il y en aura un. C'est une cible abstraite. Comparez cela avec 'make resources.py', dans lequel make vérifiera si le * fichier *" resources.py "existe est plus récent que toutes ses dépendances et si ce n'est pas le cas, essayez de (re) créer ce * fichier *. – dmckee

Questions connexes