CMake Key Points in Qt6

001.
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Widgets) Usages

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core)

这行代码试图找到名为 Qt6 或 Qt5 的 Qt 版本,并且要求找到其中的 Core 组件。 如果系统上安装了 Qt6,这行代码会找到 Qt6;如果没有找到 Qt6,会尝试找到 Qt5。

find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)

这行代码利用第一个 find_package 结果中设置的 QT_VERSION_MAJOR 变量来找到具体的 Qt 版本及其 Core 组件。

cmake_minimum_required(VERSION 3.14)

project(LibDiyToolsWrapper LANGUAGES CXX)

set(CMAKE_AUTOUIC ON)

set(CMAKE_CXX_STANDARD 17)

set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_library( LibDiyToolsWrapper SHARED LibDiyToolsWrapper_global.h )

include_directories( .. ../inc )

target_compile_definitions(LibDiyToolsWrapper PRIVATE LIBDIYTOOLSWRAPPER_LIBRARY)

set( DESTINATION_DIR $<IF:$<CONFIG:Debug>,${CMAKE_BINARY_DIR}/finalDLLs/Debug,) 嵌套

set(
    DESTINATION_DIR $<IF:$<CONFIG:Debug>,${CMAKE_BINARY_DIR}/finalDLLs/Debug,
    DESTINATION_DIR $<IF:$<CONFIG:Debug>,${CMAKE_BINARY_DIR}/finalDLLs/Release,
    DESTINATION_DIR $<IF:$<CONFIG:Debug>,${CMAKE_BINARY_DIR}/finalDLLs/Profile,    
    ${CMAKE_BINARY_DIR}/Unknown>>>
)
$<IF:               # 第一层开始
    $<CONFIG:Debug>,${CMAKE_BINARY_DIR}/Debug,  # 第一层条件和结果
    $<IF:           # 第二层开始
        $<CONFIG:Release>,${CMAKE_BINARY_DIR}/Release,  # 第二层条件和结果
        $<IF:       # 第三层开始
            $<CONFIG:Profile>,${CMAKE_BINARY_DIR}/Profile,  # 第三层条件和结果
            ${CMAKE_BINARY_DIR}/Unknown  # 默认值
        >  # 第三层结束
    >  # 第二层结束
>  # 第一层结束