как добавить готовые объектные файлы к исполняемому в 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
будет связан.