У меня есть OBJECT
библиотека objlib
которая связана с главной целевой maintarget
. У objlib
есть зависимая библиотека, скажем, ZLIB
. Если мы используем устаревшие переменные <package-name>_*
тогда это просто:
add_library(objlib OBJECT ...)
target_include_directories(objlib ${ZLIB_INCLUDE_DIRS})
...
add_executable(maintarget $<TARGET_OBJECTS:objlib>)
target_link_libraries(maintarget ${ZLIB_LIBRARIES})
Но я хочу использовать зависимость как IMPORTED
библиотеку, потому что она более краткая (и удобный способ создания конфигурационных модулей, то есть, используя install(EXPORT...)
, делает именно это).
Следующий код не работает, потому что target_link_libraries
нельзя использовать с библиотекой OBJECT
:
add_library(objlib OBJECT ...)
target_link_libraries(objlib ZLIB::ZLIB)
Связывание ZLIB::ZLIB
с maintarget
также не работает, objlib
не получает включаемые каталоги:
add_library(objlib OBJECT ...)
...
add_executable(maintarget $<TARGET_OBJECTS:objlib>)
target_link_libraries(maintarget ZLIB::ZLIB)
Хакерство с промежуточной библиотекой INTERFACE
(objlib-wrapper
) также не работает.
Единственное, что работает, - это запрос свойств библиотеки IMPORTED
и восстановление информации, обычно доступной в переменных <package-name>_*
. Какой неприятный обходной путь.
Есть ли способ лучше?