如何指定OBJECT库的导入依赖项?

时间:2015-07-08 10:32:48

标签: cmake

我有一个OBJECTobjlib,它链接到主目标maintargetobjlib有一个依赖库,比如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>_*变量中通常可用的信息。这是一个讨厌的解决方法。

有更好的方法吗?

1 个答案:

答案 0 :(得分:10)

从CMake 3.12开始,您现在可以在对象库上使用target_link_libraries来获得使用要求。

使用3.12,您提到的这种方法应该有效:

add_library(objlib OBJECT ...)
target_link_libraries(objlib ZLIB::ZLIB)