Подтвердить что ты не робот

Как создать объектные файлы только один раз с cmake?

У меня есть файл CMakeLists.txt, который выглядит так:

add_executable(exec1 exec1.c source1.c source2.c source3.c)
add_executable(exec2 exec2.c source1.c source2.c source3.c)
add_executable(exec3 exec3.c source1.c source2.c source3.c)

Файлы source1.o source2.o source3.o занимают очень много времени, и, поскольку они являются общими для всех исполняемых файлов, я хочу, чтобы каждый из них был создан только один раз. Однако текущее поведение для cmake заключается в том, чтобы перестроить их для каждой цели-исполнителя отдельно, что является ненужным дублированием усилий.

Есть ли способ сказать cmake для создания объектных файлов только один раз?

4b9b3361

Ответ 1

Нет. Это было бы трудно достичь, поскольку исходные файлы могут быть скомпилированы с различными параметрами компилятора, этапами после сборки и т.д.

Что вы можете сделать, это поместить объектные файлы в статическую библиотеку и связать их с этим:

add_library(mylib STATIC source1.c source2.c)
add_executable(myexe source3.c)
target_link_libraries(myexe mylib)

EDIT: вы можете поместить его в общую библиотеку.

Ответ 2

Да, в CMake 2.8.8 вы можете использовать библиотеку объектов, которая является своего рода виртуальной библиотекой, которая имеет те же организационные и зависимые свойства реальной статической или общей библиотеки, но не создает файл на диске. См. Учебники по темам CMake: Библиотека объектов.