Cmake和gcc结合使用

| 我在源目录中有许多源文件。例如a.c,b.c,c.c,并希望通过带有-combine选项的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的旧版本,我无法使用LTO来解决cmake中的相同问题。 谢谢。     
已邀请:
        使用add_custom_target / add_custom_command。 无论如何,它都是非便携式构造,因此这里是简单示例 [项目根目录],其中有两个文件夹[src]-这里是N个文件,[build]是二进制文件,还有CMakeLists.txt
cmake_minimum_required(VERSION 2.6.0 FATAL_ERROR)
set(TARGET_NAME whole)
project(${TARGET_NAME} C)

file(GLOB SRC_FILES src/*.c)

add_custom_target(${TARGET_NAME} ${CMAKE_C_COMPILER} -flto -fwhole-program ${SRC_FILES} -o ${TARGET_NAME})
在生成文件夹中运行cmake ..;使VERBOSE = 1整 这将为您工作。 但是,根据文档,-fwhole-program仅适用于可执行文件。   -整个程序   假设当前的编译单元代表正在编译的整个程序。除main之外的所有公共函数和变量,以及由属性externally_visible合并的那些公共函数和变量,都变为静态函数,实际上是由过程间优化器更积极地优化的。 因此,您可以在源文件中的任何位置定义main。     

要回复问题请先登录注册