2010-08-16 7 views
54

Creo que esta es una pregunta que se ha hecho muchas veces, pero no puedo encontrar el derecho manera de hacerlo.Subdirectories y Makefiles

que tienen la siguiente estructura:

project/ 
project/Makefile 
project/code 
project/code/*.cc 
project/code/Makefile 

Cuando estoy en el directorio '/ Proyecto de código' y llamar a "hacer project_code" mi código está compilando correctamente.

Me gustaría hacer eso cuando estoy en 'project /', simplemente llamando "make project_code" como si estuviera en 'project/code'.

El archivo 'project/Makefile' contendrá otras reglas (como 'install') y algunas reglas para compilar como si estuviera en 'project/code'. Y para eso, estoy solicitando su ayuda ... Gracias.

Respuesta

78

La forma más sencilla es hacer:

CODE_DIR = code 

.PHONY: project_code 

project_code: 
     $(MAKE) -C $(CODE_DIR) 

La regla .PHONY significa que project_code no es un archivo que debe compilarse, y el indicador -C indica un cambio en el directorio (equivalente a ejecutar cd code antes de llamar al make). Puede utilizar el mismo método para llamar a otros destinos en el archivo Make code.

Por ejemplo:

clean: 
     $(MAKE) -C $(CODE_DIR) clean 
+0

¡Gracias, funciona! Una última cosa: ¿se define siempre $ (MAKE)? –

+0

en GNU Make, sí. –

+2

es $ (MAKE) una referencia a una variable que usted definió? ¿O es una función incorporada que siempre está ahí? – mtmurdock

0

trate de poner esta regla en el proyecto/Makefile algo como esto (para GNU make):

 
.PHONY: project_code 
project_code: 
     cd code && make 
+14

Esto * * no funcionar como está escrito, porque por defecto en GNU make, cada línea de un cuerpo regla se ejecuta en un shell diferente. Entonces, el cd ocurrirá, pero el shell que lo ejecutó saldrá inmediatamente; luego 'make' se ejecutará por separado. De hecho, creo que esto convertirá a make en un ciclo de recursión infinito. Sin embargo, si cambia el código a 'código de cd && make', funcionará como se esperaba. –

+4

Editado después de 4 años para coincidir con la sugerencia –

+2

@EmanueleCipolla Pulgar arriba después de otros cuatro años para saludar al espíritu. – h9uest

Cuestiones relacionadas