как добавить готовые объектные файлы к исполняемому в cmake
У меня есть add_custom_target который запускает make для проекта (этот проект не использует cmake!) И генерирует объектный файл. Я хотел бы добавить этот объектный файл к исполняемой цели в моем проекте cmake. Есть ли способ сделать это?
Ответы
Ответ 1
SET(OBJS
${CMAKE_CURRENT_SOURCE_DIR}/libs/obj.o
)
ADD_EXECUTABLE(myProgram ${OBJS} <other-sources>)
SET_SOURCE_FILES_PROPERTIES(
${OBJS}
PROPERTIES
EXTERNAL_OBJECT true
GENERATED true
)
Это сработало для меня. По-видимому, необходимо установить эти два свойства, EXTERNAL_OBJECT и GENERATED.
Ответ 2
Я сделал это в своих проектах с помощью target_link_libraries():
target_link_libraries(
myProgram
${CMAKE_CURRENT_SOURCE_DIR}/libs/obj.o
)
Любой полный путь, заданный для target_link_libraries() считается файлом, который должен быть перенаправлен в компоновщик.
Для версии CMake> = 3.9 есть add_library(... OBJECT IMPORTED..) вы можете использовать.
См. Cmake: использование импортированного объекта
И - см. Также ответ от @arrowd - есть недокументированный способ добавления их непосредственно в список целевых исходных файлов (фактически предназначенный для поддержки выходов объектных файлов для add_custom_command() сборки add_custom_command() как в вашем случае).
Ответ 3
Вы можете перечислить объектные файлы по источникам в add_executable() и addlibrary():
add_executable(myProgram
source.cpp
object.o
)
Единственное, что вам нужно использовать add_custom_command для создания объектных файлов, поэтому CMake будет знать, где их получить. Это также гарантирует, что ваши объектные файлы будут созданы до того, как myProgram будет связан.