utilizar primer make entre ejecutar diferencia como comando makefile gnu-make

primer - makefile linux c



Ejecutar make en cada subdirectorio. (3)

Hay una biblioteca llamada prorab para GNU make que admite la inclusión de makefiles independientes en subdirectorios.

Alguna información sobre github: https://github.com/igagis/prorab/blob/master/wiki/HomePage.md

Básicamente, con prorab invocar todos los makefiles en subdirectorios se ve así:

include prorab.mk $(eval $(prorab-build-subdirs))

Tengo un directorio ( root_dir ), que contiene varios subdirectorios ( subdir1, subdir2, ... ).

Quiero ejecutar el make en cada directorio en root_dir , usando un Makefile colocado en él. (Obviamente se supone que cada uno de los subdir... tiene dentro de su propio Makefile).

Entonces hay esencialmente dos preguntas:

  1. ¿Cómo obtener una lista de directorios en Makefile (automáticamente)?
  2. ¿Cómo ejecutar make para cada uno de los directorios dentro de un archivo make?

Como sé para ejecutar make en un directorio específico, hago lo siguiente:

$(MAKE) -C subdir


Hay varios problemas para hacer la sub-marca dentro de un bucle for en una sola receta. La mejor manera de hacer múltiples subdirectorios es así:

SUBDIRS := $(wildcard */.) all: $(SUBDIRS) $(SUBDIRS): $(MAKE) -C $@ .PHONY: all $(SUBDIRS)

(Solo para señalar que esto es específico de GNU; no mencionó ninguna restricción en la versión de make que está usando).

ETA Aquí hay una versión que soporta múltiples objetivos de nivel superior.

TOPTARGETS := all clean SUBDIRS := $(wildcard */.) $(TOPTARGETS): $(SUBDIRS) $(SUBDIRS): $(MAKE) -C $@ $(MAKECMDGOALS) .PHONY: $(TOPTARGETS) $(SUBDIRS)


Prueba esto :

SUBDIRS = foo bar baz subdirs: for dir in $(SUBDIRS); do / $(MAKE) -C $$dir; / done

Esto puede ayudarte a link

Edición: también puedes hacer:

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 se debe compilar, y la marca -C indica un cambio en el directorio (equivalente a ejecutar el código cd antes de llamar a make). Puede usar el mismo método para llamar a otros destinos en el código Makefile.

Por ejemplo:

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

Source