我有许多源文件在源目录中。例如a.c,b.c,c.c,并希望使用gcc和-combine选项进行编译。
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 可以为你自动化这两个过程。 - Kerrek SB