如果你真正想要的,你可以輸入幾個命令(-std=c++11
告訴編譯器,這是C++11代碼,-Wall
要求幾乎所有警告,-Wextra
詢問更多的人,-g
詢問調試信息,並-c
避免了聯步驟)
g++ -std=c++11 -Wall -Wextra -g -c file1.cpp
g++ -std=c++11 -Wall -Wextra -g -c file2.cpp
g++ -std=c++11 -Wall -Wextra -g -c file3.cpp
這些命令生成對象文件file1.o
,file2.o
,file3.o
其可以鏈接到使一個可執行:
g++ -std=c++11 -g file1.o file2.o file3.o -o run
順便說一句,你可能會在一個單一的命令來運行:
g++ -std=c++11 -Wall -Wextra -g file1.cpp file2.cpp file3.cpp -o run
但這不是最佳的(因爲通常你編輯一個文件一次,而其他文件可能不需要重新編譯)。
但你真的想使用GNU make,通過編寫Makefile
(見this example),並簡單地用make
編制;如果你只改變file2.cpp
然後make
會注意到只有file2.o
必須再生(和最後一個環節,使再次run
)
你不需要編譯頭文件(它們被g++
編譯預處理)。您可能會對precompiled headers和生成文件依賴關係generation感興趣。
一旦你的程序調試(與像gdb
調試器的幫助,也valgrind ....)你可以要求編譯器通過-O
或-O2
更換-g
做optimizations(你甚至可以用兩個-g -O
編譯)。如果您對程序進行基準測試(例如使用time
),請不要忘記要求編譯器進行優化!
PS。您的g++
命令可能需要more arguments,例如-I
...添加一個包括目錄,-DNAME
定義預處理器的名稱,-L
...添加庫目錄,-l
...鏈接庫,並秩序的論據是g++
刪除重要來自編譯行的頭文件,你不需要編譯頭文件。 – user657267 2015-03-13 06:10:56
順便說一句,即使程序編譯時沒有編譯器的診斷,程序也可以(並且通常會)發生錯誤。這些錯誤稱爲*錯誤*,您可能花費數週時間來查找並修正錯誤! – 2015-03-13 06:40:07