用于自定义调试构建的 CMake qt 输入库后缀
Posted
技术标签:
【中文标题】用于自定义调试构建的 CMake qt 输入库后缀【英文标题】:CMake qt input library postfix for custom debug build 【发布时间】:2019-12-13 04:41:28 【问题描述】:我一直坚持为多配置 IDE (Visual Studio) 编写 cmake 文件。 我的目标是添加一个自定义配置并告诉 Visual Studio 我想使用 Qt 的调试库 (qtcored.lib),就像我选择调试配置时所做的那样。使用下面的代码,当我选择 CustomDebug 配置时,我在链接器输入中发布了库
有人知道如何实现吗?
谢谢
cmake_minimum_required(VERSION 3.12.0)
project(custom-conf)
find_package(Qt5Core CONFIG REQUIRED)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(SRC main.cpp)
set(QT_LIBS Qt5::Core)
add_executable(custom-conf WIN32 $SRC)
target_link_libraries(custom-conf $QT_LIBS)
#
get_property(isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if(isMultiConfig)
set(CMAKE_CONFIGURATION_TYPES "CustomDebug;Debug;Release" CACHE STRING "" FORCE)
set(CMAKE_EXE_LINKER_FLAGS_CUSTOMDEBUG "/debug")
endif()
【问题讨论】:
【参考方案1】:我想使用 Qt 的调试库 (qtcored.lib),因为它是在我选择调试配置时完成的。
使用 IMPORTED 目标可以通过使用MAP_IMPORTED_CONFIG<CONFIG> 目标属性轻松实现:
# For CustomDebug configuration of the main project
# use Debug configuration of the IMPORTED target
set_target_properties(Qt5::Core PROPERTIES
MAP_IMPORTED_CONFIG_CUSTOMDEBUG DEBUG)
通过设置CMAKE_MAP_IMPORTED_CONFIG<CONFIG> 变量,您可以自动为所有导入目标设置属性:
set(CMAKE_MAP_IMPORTED_CONFIG_CUSTOMDEBUG DEBUG)
#...
# This call will create IMPORTED target Qt5::Core which
# MAP_IMPORTED_CONFIG_CUSTOMDEBUG property is already set.
find_package(Qt5Core CONFIG REQUIRED)
(变量赋值应该在之前任何像 find_package
这样创建 IMPORTED 目标的调用。)
【讨论】:
挖掘 qt cmake 文件我发现内部它只使用 _populate_Core_target_properties(DEBUG "Qt5Cored.dll" "Qt5Cored.lib" ),我必须映射这些属性。谢谢回答以上是关于用于自定义调试构建的 CMake qt 输入库后缀的主要内容,如果未能解决你的问题,请参考以下文章
qt creator创建cmake构建的程序,无法启动调试(点左下角运行不出结果 No executable specified.)