cmake构建Qt项目

作者 : admin 本文共3418个字,预计阅读时间需要9分钟 发布时间: 2024-06-16 共4人阅读

cmake构建Qt项目

项目结构

cmake构建Qt项目插图

一、添加头文件

# 添加头文件目录,还需要在add_executable中添加头文件!!!
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
add_executable(landlards
        include/test.h)

二、添加源文件

aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src SRC_SOURCE_FILES)
add_executable(landlards
        ${SRC_SOURCE_FILES})

三、添加UI文件

cmake构建Qt项目时,经常ui文件报错,具体如下

cmake构建Qt项目插图(1)

这是因为cmake构建ui文件时,要生成ui_xxx.h文件,但是它找不到,我也不知道什么原因,但是能解决就行

添加如下代码

set(CMAKE_AUTOUIC ON)
# 搜索当前目录下的所有 UI 文件
file(GLOB UI_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/forms/*.ui)
# 如果你的.ui文件在一个特定目录,指明这个目录,解决找不到ui_xxx.h的问题!!!
# 设置自动用户界面编译器(UIC)的搜索路径,配置了 UIC 在编译过程中搜索 UI 定义文件(通常以 .ui 结尾)的目录。这里指定的路径是当前项目的 forms 目录, CMake 构建一个使用 Qt 的项目时,CMake 会告诉 UIC 去 forms 目录下查找 .ui 文件,并根据这些 UI 文件生成对应的 C++ 源代码文件
set(CMAKE_AUTOUIC_SEARCH_PATHS ${CMAKE_CURRENT_SOURCE_DIR}/forms)
add_executable(landlards
        ${UI_SOURCE_FILES})

四、添加资源文件

  • 方式一: 使用file函数添加,在修改资源文件后需要重新加载cmake程序
file(GLOB QRC_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/resources/*.qrc)
qt5_add_resources(RESOURCES ${QRC_SOURCE_FILES})
add_executable(landlards
        ${QRC_SOURCE_FILES})
  • 方式二:直接在add_executabl添加中手动

    set(QRC_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/resources/res.qrc)
    # 需要手动添加头文件
    add_executable(landlards
            ${QRC_SOURCE_FILES})
    

五、去除所有日志输出

# 去掉所有qDebug()日志输出
add_definitions(-DQT_NO_DEBUG_OUTPUT)
# 去掉所有qWarning()日志输出
add_definitions(-DQT_NO_WARNING_OUTPUT)
# 去掉所有qCritical()日志输出
add_definitions(-DQT_NO_CRITICAL_OUTPUT)

完整代码

cmake_minimum_required(VERSION 3.28)
project(landlards)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

set(CMAKE_PREFIX_PATH "D:/Qt/5.15.2/msvc2019_64")

# 去掉所有qDebug()日志输出
#add_definitions(-DQT_NO_DEBUG_OUTPUT)
# 去掉所有qWarning()日志输出
#add_definitions(-DQT_NO_WARNING_OUTPUT)
# 去掉所有qCritical()日志输出
#add_definitions(-DQT_NO_CRITICAL_OUTPUT)

find_package(Qt5 COMPONENTS
        Core
        Gui
        Widgets
        Test# 测试模块
        REQUIRED)
# 搜索当前目录下的所有 UI 文件
file(GLOB UI_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/forms/*.ui)
# 如果你的.ui文件在一个特定目录,指明这个目录,解决找不到ui_xxx.h的问题!!!
set(CMAKE_AUTOUIC_SEARCH_PATHS ${CMAKE_CURRENT_SOURCE_DIR}/forms)
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src SRC_SOURCE_FILES)
# 添加头文件目录,还需要在add_executable中添加头文件!!!
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
# 添加资源文件,不推荐使用GLOB,因为GLOB会导致CMake无法检测到新文件,从而无法触发重新生成,建议手动添加
#file(GLOB QRC_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/resources/*.qrc)
#qt5_add_resources(RESOURCES ${QRC_SOURCE_FILES})
set(QRC_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/resources/res.qrc)
# 需要手动添加头文件
add_executable(landlards
        ${SRC_SOURCE_FILES}
        ${UI_SOURCE_FILES}
        ${QRC_SOURCE_FILES}
        include/test.h)

target_link_libraries(landlards
        Qt5::Core
        Qt5::Gui
        Qt5::Widgets
        Qt5::Test# 测试模块
)
# 以下是clion自动生成的,应该是适配32为系统的设置吧,不了解
if (WIN32 AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
    set(DEBUG_SUFFIX)
    if (MSVC AND CMAKE_BUILD_TYPE MATCHES "Debug")
        set(DEBUG_SUFFIX "d")
    endif ()
    set(QT_INSTALL_PATH "${CMAKE_PREFIX_PATH}")
    if (NOT EXISTS "${QT_INSTALL_PATH}/bin")
        set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..")
        if (NOT EXISTS "${QT_INSTALL_PATH}/bin")
            set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..")
        endif ()
    endif ()
    if (EXISTS "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll")
        add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
                COMMAND ${CMAKE_COMMAND} -E make_directory
                "$/plugins/platforms/")
        add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
                COMMAND ${CMAKE_COMMAND} -E copy
                "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll"
                "$/plugins/platforms/")
    endif ()
    foreach (QT_LIB Core Gui Widgets)
        add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
                COMMAND ${CMAKE_COMMAND} -E copy
                "${QT_INSTALL_PATH}/bin/Qt5${QT_LIB}${DEBUG_SUFFIX}.dll"
                "$")
    endforeach (QT_LIB)
endif ()

本站无任何商业行为
个人在线分享 » cmake构建Qt项目
E-->