Heim > Backend-Entwicklung > C++ > Wie kann GNU Make verwendet werden, um mehrere ausführbare Dateien mit ähnlichen Regeln aus verschiedenen Verzeichnissen effizient zu erstellen?

Wie kann GNU Make verwendet werden, um mehrere ausführbare Dateien mit ähnlichen Regeln aus verschiedenen Verzeichnissen effizient zu erstellen?

Linda Hamilton
Freigeben: 2024-10-29 08:42:03
Original
781 Leute haben es durchsucht

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

Ausführbare Dateien mit ähnlichen Regeln mit GNU Make erstellen

Als Alternative zu Scons kann GNU Make eine effiziente Lösung für Ihre Aufgabe sein. Mit GNU Make können Sie einen flexiblen Build-Prozess durch sein Abhängigkeitsauflösungssystem definieren.

GNU Make-Ansatz

Wir stellen zwei Makefiles vor, die das Erstellen und Bereinigen von beiden Seiten aus ermöglichen -Ebenenverzeichnis (all_lessons) und einzelne Projektverzeichnisse:

project.mk

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

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))
Nach dem Login kopieren

Vorteile

  • Einfachheit: GNU Make ist unkompliziert und leicht zu verstehen, auch für Anfänger.
  • Erweiterbarkeit: Makefiles können einfach mit benutzerdefinierten Zielen und Regeln erweitert werden.
  • Parallelisierbar: GNU Make kann mehrere Ziele gleichzeitig erstellen, was es für große Projekte effizient macht.
  • Automatische Abhängigkeitsverfolgung:Make erkennt und aktualisiert Abhängigkeiten automatisch und stellt so sicher, dass nur notwendige Ziele erstellt werden.

Verwendung

Zum Erstellen aus einer Einzelperson Erstellen Sie im Projektverzeichnis einen symbolischen Link zu project.mk als Makefile in diesem Verzeichnis. Beim Erstellen oder Bereinigen aus dem Verzeichnis „all_lessons“ werden alle Projekte verarbeitet, während sich das Erstellen oder Bereinigen aus dem Verzeichnis eines Projekts nur auf dieses Projekt auswirkt.

Dieser Ansatz bietet eine saubere und flexible Möglichkeit, mehrere ausführbare Dateien mit ähnlichen Regeln aus verschiedenen Verzeichnissen zu erstellen.

Das obige ist der detaillierte Inhalt vonWie kann GNU Make verwendet werden, um mehrere ausführbare Dateien mit ähnlichen Regeln aus verschiedenen Verzeichnissen effizient zu erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage