我在源代碼目錄中有很多源文件。例如a.c,b.c,c.c,並希望通過gcc使用-combine選項進行編譯。Cmake和gcc結合使用
set(CMAKE_C_FLAGS "-combine")
set(SRC a.c b.c c.c)
add_executable(a.out ${SRC})
的CMake編譯在目標文件中的每個* .c文件,但我想編譯所有來源的一個對象。我怎樣才能得到這個。
在GCC的術語:
gcc -combine a.c b.c c.c -o module.o
ar rcs library.a module.o
但cmake的使用每個模塊翻譯的來源。
gcc a.c -o a.o
gcc b.c -o b.o
gcc c.c -o c.o
ar rcs library.a a.o b.o c.o
用聯合翻譯可以加快程序的執行速度。由於舊版本的gcc,我無法使用可以解決cmake中相同問題的LTO。
謝謝。
您確定選項「-combine」存在嗎?我有一種感覺,那不是你想要做的。也許你的意思是'-fwhole-program',這在道義上等同於將所有源文件連接在一起。但更有可能的是你只是試圖建立一個可重用的庫。使用'-shared'來創建一個動態庫,或者使用'ar'程序將很多'.o'文件合併到一個靜態庫中。 CMake可以爲你自動執行。 – 2011-06-14 19:11:56
是的,我確定。這個選項存在於gcc版本4.4/4.5中 – 2011-06-16 08:29:54
有趣,它在4.6中消失了! :-)它的目的是什麼?任何你用'-fwhole-program'都無法實現的東西? – 2011-06-16 10:37:28