首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 多檔案編譯關係與 g++ 實戰指南

     編輯:程式設計綜合問答

C++ 專案通常包含:標頭檔、實作檔、主程式檔。編譯流程分為前置處理 → 編譯 → 組譯 → 連結四階段。

檔案角色

  • .h / .hpp:宣告(類別、函式、常數、inline 函式、模板)。不直接編譯,透過 #include 展開至 .cpp。
  • .cpp / .cc / .cxx:實作,各自獨立編譯成目標檔。
  • .o / .obj:目標檔,連結器合併生成執行檔。

g++ 單指令編譯

g++ main.cpp utils.cpp -o myapp -std=c++17 -Wall -O2

等同於:

g++ -c main.cpp -o main.o
g++ -c utils.cpp -o utils.o
g++ main.o utils.o -o myapp

Makefile 基礎範本

CXX = g++
CXXFLAGS = -std=c++17 -Wall -O2
TARGET = myapp
SRCS = main.cpp utils.cpp
OBJS = $(SRCS:.cpp=.o)

all: $(TARGET)

$(TARGET): $(OBJS)
	$(CXX) $(OBJS) -o $@

%.o: %.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $@

clean:
	rm -f $(OBJS) $(TARGET)

常見錯誤與對策

錯誤原因解決
undefined reference宣告未實作、連結順序錯、遺漏 .cpp檢查實作、調整連結順序、補齊 SRCS
multiple definition標頭檔含非 inline 定義、重複包含加 include guard、移至 .cpp、用 inline
header not found-I 路徑缺失加 -I./include

進階:預編譯標頭 (PCH)

g++ -x c++-header common.h -o common.h.gch
# 後續編譯自動使用

適用於大型專案常用標頭(如 <vector>, <string>, 自訂通用標頭)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved