Hace algunos días publiqué una respuesta en desbordamiento de pila sobre cómo escribir una marca jerárquica (http://stackoverflow.com/questions/1498213/make-hierarchical-make-file). La respuesta fue eliminada, por lo tanto, supongo que fue completamente incorrecta o fuera del tema (o ambas cosas).¿Cómo escribir un simple Makefile jerárquico?
Me gustaría saber cómo escribir jerárquico Makefile. Este es un Makefile que llama a varios Makefiles en subdirectorios. Asumo una estructura de directorios como:
- project
|--module1
|--Makefile
|--...
|--module2
|--Makefile
|--module2.1
|--module2.2
|--...
|--module3
|--Makefile
|--...
|--etc
También suponen que los miembros del proyecto sólo se han puesto de acuerdo únicamente a un conjunto mínimo de objetivos makefile como: todos (por defecto), limpio, instalar, y así. Por lo tanto, los siguientes comandos hacen que incluyen banderas serán propagan a los módulos:
cd project
make clean
make -k
make install
#etc
Lo que está mal con el siguiente Makefile proyecto:
PACKAGES = \
module1 \
module2 \
emodule3
VIRTUAL_PACKAGES = $(addsuffix /.virtual.Makefile,${PACKAGES})
TARGETS=clean install all
.PHONY: $(TARGETS)
default: all
FLAGS = $(ifeq $(MAKEFLAGS) "","",-$(MAKEFLAGS))
$(TARGETS): $(VIRTUAL_PACKAGES)
$(VIRTUAL_PACKAGES):
$(MAKE) $(FLAGS) -C $(@D) $(MAKECMDGOALS)
sí, el $ VIRTUAL_PACKAGES en el Makefile parece extraño. La alternativa de la mezcla de un bucle for es un poco más corto, pero no estoy seguro de si es mejor (ya que necesito confiar en bash): PAQUETES = \ módulo 1 \ modulo2 \ emodule3
TARGETS=clean install all
.PHONY: $(TARGETS)
default: all
FLAGS = $(ifeq $(MAKEFLAGS) "","",-$(MAKEFLAGS))
$(TARGETS):
for p in $(PACKAGES) ; do $(MAKE) $(FLAGS) -C $$p [email protected] || break; done
Gracias !
¿Eso asignación a 'trabajo FLAGS'? ¿Qué versión de Make estás usando? – Beta
Una solución no recursiva: http://stackoverflow.com/a/7321954/412080 –
Puede o no ser útil para usted, pero para administrar proyectos complejos me resulta mucho más fácil. Es realmente fácil tener una jerarquía de CMakeLists.txt. Los Makefiles se generarán automáticamente. – Hindol