Maison > développement back-end > C++ > Comment GNU Make peut-il être utilisé pour créer efficacement plusieurs exécutables avec des règles similaires provenant de différents répertoires ?

Comment GNU Make peut-il être utilisé pour créer efficacement plusieurs exécutables avec des règles similaires provenant de différents répertoires ?

Linda Hamilton
Libérer: 2024-10-29 08:42:03
original
813 Les gens l'ont consulté

How can GNU Make be used to efficiently build multiple executables with similar rules from different directories?

Créer des exécutables avec des règles similaires à l'aide de GNU Make

Comme alternative à Scons, GNU Make peut être une solution efficace pour votre tâche. GNU Make vous permet de définir un processus de construction flexible grâce à son système de résolution de dépendances.

Approche GNU Make

Nous présentons deux makefiles qui permettent la construction et le nettoyage depuis le haut. -répertoire de niveau (all_lessons) et répertoires de projets individuels :

project.mk

all :
% : forward_ # build any target by forwarding to the main makefile
    $(MAKE) -C .. project_dirs=$(notdir ${CURDIR}) $@
.PHONY : forward_
Copier après la connexion

Makefile

# one directory per project, one executable per directory
project_dirs := $(shell find * -maxdepth 0 -type d )

# executables are named after its directory and go into the same directory
exes := $(foreach dir,${project_dirs},${dir}/${dir})

all : ${exes}

#  the rules

.SECONDEXPANSION:

objects = $(patsubst %.cpp,%.o,$(wildcard $(dir )*.cpp))

# link
${exes} : % : $$(call objects,$$*) Makefile
    g++ -o $@ $(filter-out Makefile,$^) ${LDFLAGS} ${LDLIBS}

# compile .o and generate dependencies
%.o : %.cpp Makefile
    g++ -c -o $@ -Wall -Wextra ${CPPFLAGS} ${CXXFLAGS} -MD -MP -MF ${@:.o=.d} $<

.PHONY: clean

clean :
    rm -f $(foreach exe,${exes},$(call objects,${exe})) $(foreach dir,${project_dirs},$(wildcard ${dir}/*.d)) ${exes}

# include auto-generated dependency files
-include $(foreach dir,${project_dirs},$(wildcard ${dir}/*.d))
Copier après la connexion

Avantages

  • Simplicité : GNU Make est simple et facile à comprendre, même pour les débutants.
  • Extensibilité : Les Makefiles peuvent être facilement étendus avec des cibles et des règles personnalisées.
  • Parallélisable : GNU Make peut créer plusieurs cibles simultanément, ce qui le rend efficace pour les grands projets.
  • Suivi automatique des dépendances :Make détecte et met à jour automatiquement les dépendances, garantissant que seules les cibles nécessaires sont créées.

Utilisation

Pour créer à partir d'un individu répertoire du projet, créez un lien symbolique vers project.mk en tant que Makefile dans ce répertoire. La construction ou le nettoyage à partir du répertoire all_lessons traitera tous les projets, tandis que le faire à partir du répertoire d'un projet n'affectera que ce projet.

Cette approche offre un moyen propre et flexible de créer plusieurs exécutables avec des règles similaires à partir de différents répertoires.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal