2015-03-13 67 views
0

所以我試圖練習和學習如何使用文本編輯器和命令行界面(Mac上的終端),但我很難得到它編譯。我用C++編寫,我將主文件,類和類定義分隔成多個文件。我想用終端編譯和運行程序,但遇到問題。我使用如何編譯並運行通過終端使用多個文件的程序?

g++ file1.cpp file2.cpp file3.h -o run 

進行編譯,我得到錯誤消息「無法指定-o生成多個輸出文件時」。

我打算在這個程序中有更多的文件,不知道這是甚至每次編譯的最佳方式嗎?無論如何,我該如何編譯這個程序才能運行?我知道該程序沒有任何錯誤,因爲我在IDE Xcode中進行了測試。

+2

刪除重要來自編譯行的頭文件,你不需要編譯頭文件。 – user657267 2015-03-13 06:10:56

+0

順便說一句,即使程序編譯時沒有編譯器的診斷,程序也可以(並且通常會)發生錯誤。這些錯誤稱爲*錯誤*,您可能花費數週時間來查找並修正錯誤! – 2015-03-13 06:40:07

回答

1

如果你真正想要的,你可以輸入幾個命令(-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.ofile2.ofile3.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更換-goptimizations(你甚至可以用兩個-g -O編譯)。如果您對程序進行基準測試(例如使用time),請不要忘記要求編譯器進行優化!

PS。您的g++命令可能需要more arguments,例如-I ...添加一個包括目錄,-DNAME定義預處理器的名稱,-L ...添加庫目錄,-l ...鏈接庫,並秩序的論據是g++