欢迎光临散文网 会员登陆 & 注册

QT开发CmakeLists文件详解

2023-08-14 00:47 作者:祁连XU  | 我要投稿

# **指定当前所需cmake最低版本为3.5

cmake_minimum_required(VERSION 3.5)


#  **项目名称ProjectName 版本号0.1 使用的语言C++

project(ProjectName VERSION 0.1 LANGUAGES CXX)


#  **设置自动编译

#  使自动编译UIC(将ui文件转换成c++可编译或链接的文件) MOC(将qt元对象转换为c++可编译或链接的文件) RCC(将其他可资源文件转换为c++可编译或链接的文件) 可用

set(CMAKE_AUTOUIC ON)

set(CMAKE_AUTOMOC ON)

set(CMAKE_AUTORCC ON)


#  **设置编译器

# 设置使用的c++编译器版本

set(CMAKE_CXX_STANDARD 17)


# 设置支持当前c++编译器

set(CMAKE_CXX_STANDARD_REQUIRED ON)


# **查找并加载外部依赖包

# 首先查找并加载qt6 找不到就找qt5加载 CMake将要求同时加载Widgets和PrintSupport模块,REQUIRED关键字确保这些模块是必需的,当找不到模块时,会导致CMake错误并停止构建。构建过程中,CMake将使用到的QT版本对QT_VERSION_MAJOR变量进行赋值。

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)


#根据第一个find_package函数中找到的QT版本来引用具体的模块。连续的两个find_package,确保后续构建过程中使用到的模型与先前找到的Qt版本匹配。

find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)


# **定义项目的源文件列表 包含项目源文件目录

set(PROJECT_SOURCES

        main.cpp

        pj.cpp

        pj.h

        pj.ui

        qrc.qrc

)


# 包含源文件目录 优化项目 大佬添加

INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR})


# **创建可执行文件

#  如果Qt的主要版本号大于等于6,则使用"qt_add_executable"来创建可执行文件。否则,根据目标平台选择创建动态库(Android)或可执行文件。

if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)

    qt_add_executable(ProjectName

        MANUAL_FINALIZATION

        ${PROJECT_SOURCES}

    )

else()

    if(ANDROID)

        add_library(ProjectName SHARED

            ${PROJECT_SOURCES}

        )

# Define properties for Android with Qt 5 after find_package() calls as:

#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")

    else()

        add_executable(ProjectName

            ${PROJECT_SOURCES}

        )

    endif()

endif()


#  **链接可执行文件并设置属性

# 将Qt模块链接到目标可执行文件或动态库。

target_link_libraries(ProjectName PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)



if(${QT_VERSION} VERSION_LESS 6.1.0)

  set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.ProjectName)

endif()


# 设置目标可执行文件的属性,如MacOSX的Bundle标识符、版本号和短版本字符串,以及在Windows下作为可执行文件运行。这个部分负责将Qt模块链接到目标可执行文件或动态库

set_target_properties(ProjectName PROPERTIES

    ${BUNDLE_ID_OPTION}

    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}

    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}

    MACOSX_BUNDLE TRUE

    WIN32_EXECUTABLE TRUE

)


#  **安装目标可执行文件到指定的目录

include(GNUInstallDirs)

install(TARGETS ProjectName

    BUNDLE DESTINATION .

    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}

    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}

)


#  *QT6环境下可执行文件最后处理

#qt_finalize_executable是一个CMake宏,用于在构建Qt应用程序时进行最后的可执行文件处理。qt_finalize_executable宏仅在使用Qt 6时才需要调用。

if(QT_VERSION_MAJOR EQUAL 6)

    qt_finalize_executable(ProjectName)

endif()


本文为自己精简撰写,素材采集如下。

素材支持:

解析QT6自动生成的CMake文件 - 知乎 (zhihu.com)

CMake应用:CMakeLists.txt完全指南 - 知乎 (zhihu.com)

CMake应用:核心语法篇 - 知乎 (zhihu.com)

CMake应用:基础篇 - 知乎 (zhihu.com)

在此感谢以上文章撰写者!


如有不妥,请联系本人处理!


QT开发CmakeLists文件详解的评论 (共 条)

分享到微博请遵守国家法律