Maison > développement back-end > C++ > Comment créer plusieurs exécutables avec des règles similaires à l'aide de GNU Make ?

Comment créer plusieurs exécutables avec des règles similaires à l'aide de GNU Make ?

Linda Hamilton
Libérer: 2024-10-28 14:56:02
original
995 Les gens l'ont consulté

 How to Build Multiple Executables with Similar Rules Using GNU Make?

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

Bien que Scons soit un outil de construction performant, la mise en œuvre de la fonctionnalité souhaitée peut s'avérer difficile. Une approche plus simple consiste à utiliser GNU Make, qui permet une création et un nettoyage faciles à partir des répertoires de projet de niveau supérieur et individuels.

Configuration du Makefile

Les makefiles fournis activer la construction et le nettoyage à partir du répertoire all_lessons et des répertoires de projets individuels. L'exécutable de chaque projet porte le nom de son répertoire.

Structure du projet

Pour y parvenir, vous devrez mettre en place une structure de projet similaire à l'exemple fourni :

all_lessons/
    helloworld/
        lesson.cpp
        main.cpp
    even_or_odd/
        lesson.cpp
        main.cpp
    calculator/
        lesson.cpp
        user_created_add.cpp
        main.cpp
Copier après la connexion

Contenu du Makefile

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

# project configuration

project_dirs := $(shell find * -maxdepth 0 -type d )
exes := $(foreach dir,${project_dirs},${dir}/${dir})

all : ${exes}

# 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 dependency files
-include $(foreach dir,${project_dirs},$(wildcard ${dir}/*.d))
Copier après la connexion

Utilisation

Création à partir de répertoires de projets individuels

[project_directory]$ ln -s ../project.mk Makefile  # create a symlink
[project_directory]$ make
Copier après la connexion

Création à partir du répertoire de niveau supérieur

[all_lessons]$ make
Copier après la connexion

Nettoyage des répertoires de projets individuels

[project_directory]$ cd ..
[all_lessons]$ make clean
Copier après la connexion

Nettoyage de tous les projets

[all_lessons]$ make clean
Copier après la connexion

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