2013-12-08 177 views
0

我正試圖將一堆可執行不同優化的可執行文件放在一起。我唯一的問題是,如果使用-c的gcc命令也能夠使用-O標誌? 我問這個問題,因爲我意識到當我只在gcc命令中放置優化標記來製作exe時,文件之間的大小沒有差異,這看起來不正確。GCC優化標誌

例如,我有這樣的事情:

g++ -c cat.cpp 
g++ -c dog.cpp   
g++ cat.o dog.o -o catdog 

我會用國旗上的一切是這樣的:

g++ -c -O2 sobol.cpp 
g++ -c -O2 sobol_prb.cpp   
g++ sobol.o sobol_prb.o -O2 -o catdog02 

如果有人可以幫助我,我會非常感激。

謝謝。

回答

1

是的,使用每個對象編譯的優化標誌。

(一般情況下,使用一個構建系統,如使用SCons,這使得這種事情更容易,即使它是一個「小」項目。)

1

你可以這樣說:

g++ sobol.cpp sobol_prb.cpp -O2 -o catdog02 

如果你需要編譯兩個或三個以上的文件,你應該考慮一個Makefile。

如果您正在開發一個不平凡的項目,您應該開始考慮構建系統,因爲它們比其他構建系統更受歡迎,儘管我會使用automake或cmake,但建議您使用@polkadotcadaver建議的構建系統。

0

在對象(.o)文件上執行gcc時,這基本上只是調用鏈接器並選擇適當的庫等等。在通常模式下,這一步不涉及編譯,優化標誌不起作用。

優化發生在編譯步驟(使用.cpp輸入的那一步),這就是優化開關相關的地方。

這個故事與鏈接時間優化(-flto)有點不同,在編譯和鏈接時需要使用優化開關。