首页 > 解决方案 > 用于自定义调试构建的 CMake qt 输入库后缀

问题描述

我坚持为多配置 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()

标签: c++qtcmake

解决方案


我想使用 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> 变量,您可以自动为所有 IMPORTED 目标设置属性:

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 目标的调用之前。)


推荐阅读