2012-02-12 9 views
11

¿Cómo puedo solicitar el comando make en el archivo Makefile para ejecutar recursivamente en todos los subdirectorios make comandos (definidos en el archivo Makefile en los subdirectorios)?Marca recursiva en subdirectorios

Respuesta

19
  1. Leer Recursive Use of Make capítulo de GNU Make manual.
  2. Conozca Peter Miller Recursive Make Considered Harmful artículo.
  3. ...
  4. PROFIT !!!

P. S. Un fragmento de código de my answer a una pregunta diferente pero relacionada podría usarse como una aproximación aproximada.

+2

también re: Hacer recursiva Considerado perjudicial: http://evbergen.home.xs4all.nl/nonrecursive-make.html –

+1

@Mali que vale la pena leer, sin duda! He experimentado un poco sobre este tema hace mucho tiempo también, FYI: http://abusalimov.blogspot.ru/2009/12/yet-another-implementation-of-non.html –

+0

@ wil93 ¡gracias por la edición propuesta! Agregué un enlace a otra respuesta que sugiere una solución similar a la tuya. –

6

@ eldar-abusalimov, el primer enlace que ha publicado asume que el archivo MAKE sabe cuales son las subcarpetas. Esto no siempre es cierto, y supongo que eso es lo que @tyranitar quisiera saber. En ese caso, una solución de este tipo puede hacer el trabajo: (Me tomó algún tiempo, pero necesitaba también)

SHELL=/bin/bash 

all: 
    @for a in $$(ls); do \ 
     if [ -d $$a ]; then \ 
      echo "processing folder $$a"; \ 
      $(MAKE) -C $$a; \ 
     fi; \ 
    done; 
    @echo "Done!" 
+2

Se podría lograr en Make puro: 'SUBDIRS: = $ (comodín * /.)'. Y luego iterar sobre 'SUBDIRS' e invocar una subfacturación. –

+1

@Eldar Abusalimov: Suena bien. Estoy interesado, ¿podrías detallar un poco más y publicar un fragmento de muestra? (¿Qué quiere decir con 'iterar'?) – kebs

+2

Me refiero a usar una solución, que he propuesto en mi otra respuesta: http://stackoverflow.com/a/11206700/545027 –

1

voy a presentar aquí mi solución particular. Supongamos que tenemos un directorio con muchos sub-directorios, todos ellos con su propio makefile:

root-dir\ 
    +----subdir1 
    +----subdir2 
    ... 
    +----subdirn 

a continuación, sólo tienes que copiar en la raíz-dir este Makefile:

SUBDIRS = $(shell ls -d */) 
all: 
    for dir in $(SUBDIRS) ; do \ 
     make -C $$dir ; \ 
    done 
Cuestiones relacionadas