Heim >Backend-Entwicklung >C++ >Wie kompiliere und verknüpfe ich mehrere CPP-Dateien zu einer einzigen Binärdatei?

Wie kompiliere und verknüpfe ich mehrere CPP-Dateien zu einer einzigen Binärdatei?

Susan Sarandon
Susan SarandonOriginal
2024-11-01 09:47:30734Durchsuche

How to Compile and Link Multiple .cpp Files into a Single Binary?

So kompilieren und verknüpfen Sie mehrere .cpp-Dateien zu einer Binärdatei

Dieser Artikel befasst sich mit der Frage des Kompilierens mehrerer .cpp-Dateien .o-Objekte und deren Verknüpfung zu einer einzelnen Binärdatei.

Makefile-Konfiguration

Um dies zu erreichen, kann ein Makefile mit den folgenden Inhalten verwendet werden:

SRC_DIR = ./src
OBJ_DIR = ./obj
SRC_FILES = $(wildcard $(SRC_DIR)/*.cpp)
OBJ_FILES = $(patsubst $(SRC_DIR)/%.cpp,$(OBJ_DIR)/%.o,$(SRC_FILES))

main.exe: $(OBJ_FILES)
    g++ $(LDFLAGS) -o $@ $^

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
    g++ $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $<

Erklärung:

  • SRC_DIR: Gibt das Verzeichnis an, das die Quell-.cpp-Dateien enthält.
  • OBJ_DIR: Gibt das Verzeichnis an, in dem die .o-Objekte erstellt werden.
  • SRC_FILES: Eine Liste aller .cpp-Dateien im SRC_DIR.
  • OBJ_FILES : Eine Liste aller .o-Objekte, die generiert werden.
  • main.exe: Der Name der endgültigen Binärdatei.
  • LDFLAGS: Linker-Flags.
  • CPPFLAGS: C-Präprozessor-Flags.
  • CXXFLAGS: C-Compiler-Flags.

Erstellung von Abhängigkeitsdiagrammen

Um automatisch Abhängigkeiten zwischen Quell- und Objektdateien zu generieren, fügen Sie Folgendes zum Makefile hinzu:

CXXFLAGS += -MMD
-include $(OBJ_FILES:.o=.d)

Best Practices

Dieser Ansatz wird häufig zum Kompilieren und Verknüpfen mehrerer C-Dateien verwendet. Es ist jedoch wichtig, das GNU Make-Handbuch zu Rate zu ziehen, um weitere Anleitungen und erweiterte Optionen zu erhalten.

Das obige ist der detaillierte Inhalt vonWie kompiliere und verknüpfe ich mehrere CPP-Dateien zu einer einzigen Binärdatei?. 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