2014-02-23 71 views
0

問題/目標 我試圖找出如何得到完全控制了NetBeans編譯命令,這樣我可以從改變:指定netbeans用於編譯C++程序的完整編譯命令?

「G ++ main.cpp中Foo.cpp中bar.cpp」

到:

'的g ++ main.cpp中-Wall'

原因 如果我登錄到終端和手動鍵入: '克++ main.cpp中-Wall',我的程序將COMP ile就好了。當我嘗試使用netbeans進行編譯時,我在控制檯中看到它正在執行'g ++ main.cpp foo.cpp bar.cpp',並且失敗了,因爲main.cpp已將foo.cpp和bar.cpp包含在文件。我得到「文件/方法的多重定義」錯誤。

問題 那麼,我該如何去改變命令,使它只包含編譯命令中的main.cpp?更好的是,你如何手動指定整個命令字符串?

回答

1

從你的解釋來看,你首先做錯了。當你有多個cpp文件時,你將它們中的每一個編譯成一個單獨的目標文件,然後將它們連接在一起。使用#include包含一個.cpp文件是一個錯誤的方法 - 這是頭文件(.h)文件的用途。

頭文件(.h)包含在C++文件(.cpp)中定義的代碼部分的聲明。通過包含標題,您可以使用其他地方定義的函數。其他地方可能是另一個目標文件(.o或.obj - 由gcc -c something.cpp創建)或庫文件(.lib)。當你有3個cpp文件,a.cp​​p,b.cpp,c.cpp,他們都用彼此的功能,編譯循環將是:

gcc -c a.cpp -> yields a.o 
gcc -c b.cpp -> yields b.o 
gcc -c c.cpp -> yields c.o 

gcc -o program a.o b.o c.o -> yields program (executable) 

或者簡寫:

gcc a.cpp b.cpp c.cpp -o program 

當b.cpp需要c.cpp定義的函數,則b.cpp需要

#include <c.h> 

在Ch包含的是b需要使用函數的聲明。

當您在源代碼中執行類似#include "b.cpp"的操作時,它幾乎總是錯誤的。