У меня много исходных файлов в исходном каталоге. Например, 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
Перевод с помощью комбайна может ускорить выполнение программы. Я не мог использовать LTO, который мог бы решить ту же проблему в cmake из-за старой версии gcc.
Спасибо.
-combineсуществует? У меня такое чувство, что вы пытаетесь сделать не это. Возможно, вы имеете в виду-fwhole-program, что морально эквивалентно объединению всех ваших исходных файлов вместе. Но более вероятно, что вы просто пытаетесь создать многоразовую библиотеку. Используйте-shared, чтобы создать динамическую библиотеку, или просто используйте программуar, чтобы объединить множество.oфайлов в статическую библиотеку. CMake может автоматизировать и то, и другое за вас. - person Kerrek SB   schedule 14.06.2011-fwhole-program? - person Kerrek SB   schedule 16.06.2011-combineили хочет объединить для c ++, может проверить это: pastebin.com/fRa4MnPC - person Zan Lynx   schedule 07.09.2011