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>
)
Run Code Online (Sandbox Code Playgroud)
不过,我通常将目标保留在列表中
set(target_list
lib_target1
lib_target2
...
)
Run Code Online (Sandbox Code Playgroud)
我在同一列表上执行其他操作,例如将目标的二进制目录包含在搜索路径中以进行调试。使用optimized和debug选项也不允许 lib_target... 属性通过 current_target 传递。我可以解决这个问题只是好奇是否还有其他方法?
如果您与 IMPORTED 目标链接,则其依赖于配置的属性指的是“导入的配置”。您可以随时调整项目配置和导入配置之间的映射:
全局配置映射由CMAKE_MAP_IMPORTED_CONFIG_<CONFIG> 变量调整。
下面的设置将使用项目的任何Release、Debug或RelWithDebugInfo配置的每个IMPORTED 目标的Release配置:
set(CMAKE_MAP_IMPORTED_CONFIG_RELEASE Release)
set(CMAKE_MAP_IMPORTED_CONFIG_DEBUG Release)
set(CMAKE_MAP_IMPORTED_CONFIG_RELWITHDEBUGINFO Release)
Run Code Online (Sandbox Code Playgroud)
请注意,这些设置应在创建 IMPORTED 目标之前发出。也就是说,如果此类目标是通过find_package()调用创建的,则设置应先于这些调用。
每个目标的配置映射通过MAP_IMPORTED_CONFIG_<CONFIG> 属性进行调整。
下面的设置与上面的全局设置相同,但仅适用于lib_target1IMPORTED 目标:
set_target_properties(lib_target1 PROPERTIES
MAP_IMPORTED_CONFIG_RELEASE Release
MAP_IMPORTED_CONFIG_DEBUG Release
MAP_IMPORTED_CONFIG_RELWITHDEBUGINFO Release)
Run Code Online (Sandbox Code Playgroud)
这些设置只能在创建给定的 IMPORTED 目标后应用,例如find_package()调用后。
值得一提的是,您还可以指定后备导入的配置:
set(CMAKE_MAP_IMPORTED_CONFIG_DEBUG Release Debug)
Run Code Online (Sandbox Code Playgroud)
通过这样的设置,如果您的项目是在Debug配置中构建的,并且某些 IMPORTED 目标没有Release配置,那么将使用其Debug配置。(但是如果该目标既没有发布也没有调试配置,CMake 将发出错误)。
| 归档时间: |
|
| 查看次数: |
1442 次 |
| 最近记录: |