Sous-répertoires et Makefiles

Je pense que c’est une question qui a été posée à plusieurs resockets mais je ne peux pas trouver la bonne façon de le faire.

J’ai la structure suivante:

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

Lorsque je suis dans le répertoire “project / code” et que j’appelle “make project_code”, mon code est correctement compilé.

Je voudrais le faire quand je suis dans “project /”, en appelant simplement “make project_code” comme si j’étais dans “project / code”.

Le fichier makefile ‘project / Makefile’ contiendra d’autres règles (telles que ‘install’) et certaines règles à comstackr comme si j’étais dans ‘project / code’. Et pour cela, je demande votre aide … Merci.

La manière la plus simple est de faire:

 CODE_DIR = code .PHONY: project_code project_code: $(MAKE) -C $(CODE_DIR) 

La règle .PHONY signifie que project_code n’est pas un fichier à construire, et que l’indicateur -C indique un changement de répertoire (équivalent à l’exécution du cd code avant l’appel à make ). Vous pouvez utiliser la même approche pour appeler d’autres cibles dans le code Makefile.

Par exemple:

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

Essayez de mettre cette règle dans project / Makefile quelque chose comme ceci (pour GNU make):

 .PHONY: code_projet
 code de projet:
        cd code && make