你能有效地編譯和連結多個 .cpp 檔案嗎?
問題的中心是建立一個 Makefile,在一個檔案中編譯多個 .cpp 檔案。指定的來源目錄(src/),將它們轉換為單獨的物件目錄(obj/)中對應的.o文件,最後將產生的.o檔案連結到專案根目錄(./)中的可執行二進位文件。
Makefile 實作
要在Makefile 中實現此目的,您可以定義以下變數與規則:
SRC_DIR = src/ OBJ_DIR = obj/ SRC_FILES = $(wildcard $(SRC_DIR)/*.cpp) OBJ_FILES = $(patsubst $(SRC_DIR)/%.cpp,$(OBJ_DIR)/%.o,$(SRC_FILES)) LDFLAGS = ... # Linker flags CPPFLAGS = ... # Preprocessor flags CXXFLAGS = ... # Compiler flags main.exe: $(OBJ_FILES) g++ $(LDFLAGS) -o $@ $^ $(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp g++ $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $<
此Makefile 將會先產生一個清單.cpp 檔案位於src/ 目錄中,並將其儲存在SRC_FILES 變數中。然後它會將此列表轉換為 obj/ 目錄中對應的 .o 檔案列表,該列表將儲存在 OBJ_FILES 變數中。
g 編譯器將用於將每個.cpp 檔案編譯為對應的.o 文件,g 連結器將用於將所有.o 檔案連結在一起以建立最終的可執行二進位檔案main. exe。
良好實踐與標準方法
雖然這種方法可用於編譯和鏈接多個.cpp 文件,但值得注意的是,有更標準化和更有效的方法來實現相同的目標。
其中一種方法涉及使用像這樣的建構系統CMake 或 Bazel。這些系統提供了一套更全面的工具和功能來管理編譯和連結過程,包括自動依賴性運算和跨平台支援。
以上是如何建立Makefile來高效編譯和連結多個.cpp檔?的詳細內容。更多資訊請關注PHP中文網其他相關文章!