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
Freigeben: 2024-10-28 14:56:02
Original
942 Leute haben es durchsucht

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

Makefile-Inhalte

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

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

Verwendung

Erstellen aus einzelnen Projektverzeichnissen

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

Erstellen aus dem Top-Level-Verzeichnis

[all_lessons]$ make
Nach dem Login kopieren

Einzelne Projektverzeichnisse bereinigen

[project_directory]$ cd ..
[all_lessons]$ make clean
Nach dem Login kopieren

Alle Projekte bereinigen

[all_lessons]$ make clean
Nach dem Login kopieren

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!

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