2010-08-19 6 views
6

J'espère que c'est une question très simple. J'ai une règle de modèle de makefile qui ressemble à ceci:Makefile avec plusieurs cibles

%.so : %.f %.pyf 
    f2py -c -L${LAPACK_DIR} ${GRASPLIBS} -m $* $^ ${SOURCES} --opt='-02' --f77flags='-fcray-pointer' >> silent.txt 

Je veux le makefile pour construire un certain nombre de fichiers .so, alors j'ai essayé de l'obtenir pour construire deux fichiers (radgrd_py.so et lodiso_py.so) en faisant ceci:

radgrd_py.so lodiso_py.so: 

%.so : %.f %.pyf 
f2py -c -L${LAPACK_DIR} ${GRASPLIBS} -m $* $^ ${SOURCES} --opt='-02' --f77flags='-fcray-pointer' >> silent.txt 

puis essayé:

radgrd_py.so: 

lodiso_py.so: 

%.so : %.f %.pyf 
f2py -c -L${LAPACK_DIR} ${GRASPLIBS} -m $* $^ ${SOURCES} --opt='-02' --f77flags='-fcray-pointer' >> silent.txt 

Mais dans chaque cas, il construit que la première cible que je précise. Si je lance 'make radgrd_py.so' cela fonctionne bien, je ne suis pas sûr de savoir comment spécifier une liste de fichiers qui doivent être construits pour que je puisse simplement lancer 'make'.

Répondre

13

L'astuce habituelle consiste à ajouter une cible « factice » comme la première qui dépend de toutes les cibles que vous voulez construire lors de l'exécution d'une plaine make:

all: radgrd_py.so lodiso_py.so 

Il est une convention d'appeler cet objectif « tout 'ou' par défaut '. Pour la correction supplémentaire, nous make savons que ce n'est pas un vrai fichier en ajoutant cette ligne à votre Makefile:

.PHONY: all 
+0

Merci. Exactement ce que je cherchais. – Kazza789

3

La meilleure façon est d'ajouter:

.PHONY: all 
.DEFAULT: all 
all: radgrd_py.so lodiso_py.so

Explications:

faire utilise la première cible apparaissant lorsqu'aucun .DEFAULT n'est spécifié.

.PHONY informe make que les cibles (une liste séparée par des virgules, en fait) ne créent aucun fichier ou dossier.

all: tel que proposé par schot

Questions connexes