2013-03-13 252 views
0

我希望將許多.cc文件編譯爲一個.o文件。我正在使用一個bash腳本,我需要做的是將我的單元測試源文件構建到一個unit_test.o文件中,但它說「g ++:不能用-c或-S指定-o文件「 我將這些源文件鏈接到腳本的下一個階段。使用g ++將多個源文件編譯爲一個.o

到目前爲止我有;

g++ -Wno-deprecated -std=c++0x \ 
    -o $Unit_Test_Output_Directory/unit_test.o \ 
    -c $Unit_Test_Source_Directory/test1.cc $Unit_Test_Source_Directory/test2.cc 

然後,我有我的-I和-L之後,bash中的「\」用來將命令分割成多行。

然後在鏈接階段,我將我的unit_test.o和我的源文件的.o's鏈接到unit_test_executable。

有人可以幫我嗎?我是否需要繼續調用-o unit_test1.o -c test1.cc的構建函數,然後對於測試2 ...以及在鏈接階段鏈接unit_test1.o和unit_test2.o?

我也嘗試過失敗:

g++ -Wno-deprecated -std=c++0x \ 
    -o $Unit_Test_Output_Directory/unit_test1.o \ 
    $Unit_Test_Output_Directory/unit_test2.o \ 
    -c $Unit_Test_Source_Directory/test1.cc \ 
    $Unit_Test_Source_Directory/test2.cc 
+0

基本上,你不能做到這一點:.o文件是源文件1-1目標文件。 – Joe 2013-03-13 13:29:32

+1

@Joe當然,但我懷疑lukegjpotter問的是錯誤的問題。 – Yakk 2013-03-13 13:39:45

+0

您可以隨時將源文件連接到一個臨時文件並進行編譯。這會產生太多的副作用,不要這樣做。爲什麼你甚至想要它?如果您想要一個文件,請使用ar進行歸檔。 你也可以使用--combine,但這隻對C編譯器有效。 – Pihhan 2013-03-13 16:18:20

回答

1

不能多個源文件編譯成一個目標文件。每個源文件必須被編譯爲它自己的目標文件。

你必須爲每一個源文件單獨做到這一點:

 
g++ -Wno-deprecated -std=c++0x \ 
    -o $Unit_Test_Output_Directory/unit_test1.o \ 
    -c $Unit_Test_Source_Directory/test1.cc 

g++ -Wno-deprecated -std=c++0x \ 
    -o $Unit_Test_Output_Directory/unit_test2.o \ 
    -c $Unit_Test_Source_Directory/test2.cc 
+0

這是一個可怕的解決方案,但它必須完成。我有一個完整的工作,但冗長的過程來創建一個新的單元測試文件並將其放入bash腳本中。 – lukegjpotter 2013-03-13 14:55:08

+0

@lukegjpotter這實際上是['make'](http://en.wikipedia.org/wiki/Make_%28software%29)的用途。 – 2013-03-13 15:29:21

+0

這是一個Frankenstien的Monster進程,可以讓CUTE單元測試與Maven和Jenkins一起工作。希望現在完成。 – lukegjpotter 2013-03-13 15:35:33

相關問題