是否有另一种方法可以在发布和调试配置中使用 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 传递。我可以解决它,只是好奇是否有其他方法?
最佳答案
如果您与 IMPORTED 目标链接,则其配置相关属性指的是“导入的配置”。您可以随时调整项目配置和导入配置之间的映射:
Global配置映射由CMAKE_MAP_IMPORTED_CONFIG_<CONFIG>调整变量。
下面的设置将使用每个 IMPORTED 目标的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()
调用创建的,则设置应先于这些调用。
Per-target 配置映射由 MAP_IMPORTED_CONFIG_<CONFIG> 调整属性。
下面的设置与上面的全局设置相同,但仅适用于
lib_target1
IMPORTED 目标:set_target_properties(lib_target1 PROPERTIES MAP_IMPORTED_CONFIG_RELEASE Release MAP_IMPORTED_CONFIG_DEBUG Release MAP_IMPORTED_CONFIG_RELWITHDEBUGINFO Release)
只有在创建给定的 IMPORTED 目标后才能应用这些设置,例如在
find_package()
调用之后。
值得一提的是,您还可以指定后备导入配置:
set(CMAKE_MAP_IMPORTED_CONFIG_DEBUG Release Debug)
有了这样的设置,如果你的项目是在Debug配置中构建的,而一些IMPORTED目标没有Release配置,那么它的Debug> 将使用配置。 (但如果该目标既没有 Release 也没有 Debug 配置,CMake 将发出错误)。
关于CMake 链接仅在调试和发布中发布目标的配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57223210/