当发布和调试配置都包含target_link_libraries
的目标时,还有另一种方法仅链接目标的发布库。
我知道target_link_libraries
有optimize
和debug
选项,并且可以这样完成
target_link_libraries(current_target
optimized $<TARGET_PROPERTY:lib_target,IMPORTED_IMPLIB_RELEASE>
debug $<TARGET_PROPERTY:lib_target,IMPORTED_IMPLIB_RELEASE>
)
但是我通常将目标保留在列表中
set(target_list
lib_target1
lib_target2
...
)
并且我在同一列表上执行其他操作,例如将目标的二进制目录包含在调试的搜索路径中。使用optimized
和debug
选项也不允许lib_target ...属性通过current_target传递。我可以解决这个问题,只是想知道是否还有其他方法?
答案 0 :(得分:0)
如果链接到IMPORTED目标,则其依赖于配置的属性指的是“导入的配置”。您可以随时在项目配置和导入的配置之间调整映射:
全局配置映射通过CMAKE_MAP_IMPORTED_CONFIG_<CONFIG> 变量进行调整。
以下设置将为每个导入目标的 Release 配置,用于 Release , Debug 或<您项目的em> RelWithDebugInfo 配置:
set(CMAKE_MAP_IMPORTED_CONFIG_RELEASE RELEASE)
set(CMAKE_MAP_IMPORTED_CONFIG_DEBUG RELEASE)
set(CMAKE_MAP_IMPORTED_CONFIG_RELWITHDEBUGINFO RELEASE)
请注意,这些设置应在创建导入目标之前发布。也就是说,如果此类目标是通过find_package()
调用创建的,则设置应优先于这些调用。
每个目标配置映射是通过MAP_IMPORTED_CONFIG_<CONFIG> properties 进行调整的。
下面的设置与上面的全局设置相同,但仅适用于lib_target1
导入目标:
set_target_properties(lib_target1 PROPERTIES
MAP_IMPORTED_CONFIG_RELEASE RELEASE
MAP_IMPORTED_CONFIG_DEBUG RELEASE
MAP_IMPORTED_CONFIG_RELWITHDEBUGINFO RELEASE)
只有在创建给定的导入目标后,才能应用这些设置。在find_package()
通话之后。
值得一提的是,您还可以指定 fallback 导入的配置:
set(CMAKE_MAP_IMPORTED_CONFIG_DEBUG RELEASE DEBUG)
使用这种设置,如果您的项目是在 Debug 配置中构建的,并且某些导入的目标没有 Release 配置,则其 Debug 将使用配置。 (但是,如果该目标既没有Release配置又没有Debug配置,则CMake将发出错误)。