Heim >Backend-Entwicklung >C++ >Wie erstellt man mit GNU Make mehrere ausführbare Dateien mit ähnlichen Regeln?

Wie erstellt man mit GNU Make mehrere ausführbare Dateien mit ähnlichen Regeln?

Linda Hamilton
Linda HamiltonOriginal
2024-10-28 14:56:02937Durchsuche

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

Erstellen mehrerer ausführbarer Dateien mit ähnlichen Regeln mit GNU Make

Scons ist zwar ein leistungsfähiges Build-Tool, die Implementierung der gewünschten Funktionalität kann jedoch eine Herausforderung sein. Ein einfacherer Ansatz ist die Verwendung von GNU Make, das ein einfaches Erstellen und Bereinigen sowohl aus der obersten Ebene als auch aus einzelnen Projektverzeichnissen ermöglicht.

Makefile-Setup

Die bereitgestellten Makefiles Ermöglichen Sie das Erstellen und Bereinigen sowohl aus dem Verzeichnis all_lessons als auch aus einzelnen Projektverzeichnissen. Die ausführbare Datei jedes Projekts ist nach ihrem Verzeichnis benannt.

Projektstruktur

Um dies zu erreichen, müssen Sie eine Projektstruktur ähnlich dem bereitgestellten Beispiel einrichten:

all_lessons/
    helloworld/
        lesson.cpp
        main.cpp
    even_or_odd/
        lesson.cpp
        main.cpp
    calculator/
        lesson.cpp
        user_created_add.cpp
        main.cpp

Makefile-Inhalte

project.mk

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

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))

Verwendung

Erstellen aus einzelnen Projektverzeichnissen

[project_directory]$ ln -s ../project.mk Makefile  # create a symlink
[project_directory]$ make

Erstellen aus dem Top-Level-Verzeichnis

[all_lessons]$ make

Einzelne Projektverzeichnisse bereinigen

[project_directory]$ cd ..
[all_lessons]$ make clean

Alle Projekte bereinigen

[all_lessons]$ make clean

Das obige ist der detaillierte Inhalt vonWie erstellt man mit GNU Make mehrere ausführbare Dateien mit ähnlichen Regeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn