2010-08-19 22 views
6

Afortunadamente esta es una pregunta muy simple. Tengo una regla patrón makefile que tiene este aspecto:Makefile con objetivos múltiples

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

Quiero el makefile para construir una serie de archivos .so, así que traté de conseguir que la construcción de dos archivos (radgrd_py.so y lodiso_py.so) al hacer esto:

radgrd_py.so lodiso_py.so: 

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

y luego probado esto:

radgrd_py.so: 

lodiso_py.so: 

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

Pero en cada caso, sólo se construye el primer objetivo que yo indique. Si ejecuto 'make radgrd_py.so' funciona bien, no estoy seguro de cómo especificar una lista de archivos que deben construirse para poder ejecutar 'make'.

Respuesta

13

El truco habitual es añadir un objetivo 'ficticia' como la primera que depende de todos los objetivos que desea construir cuando se ejecuta una llanura make:

all: radgrd_py.so lodiso_py.so 

Es una convención para llamar a este objetivo 'todo 'o' predeterminado '. Para la corrección adicional, vamos make saben que esto no es un archivo real al añadir esta línea a su Makefile: La mejor manera

.PHONY: all 
+0

Gracias. Exactamente lo que estaba buscando. – Kazza789

3

es agregar:

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

Explicaciones:

maquillaje utiliza el primer objetivo que aparece cuando no se especifica .DEFAULT.

.PHONY informa make que los objetivos (una lista separada por coma, de hecho) no crean ningún archivo o carpeta.

all: propuesto por schot

Cuestiones relacionadas