当前位置 : 首页 > 热点资讯 >详情

QT开发CmakeLists文件详解

热点资讯 来源 :哔哩哔哩 2023-08-14 01:03:03

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

cmake_minimum_required(VERSION )

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


【资料图】

project(ProjectName VERSION 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

)

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

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 )

set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER )

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文件 - 知乎 ()

CMake应用:完全指南 - 知乎 ()

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

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

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

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

标签:

精彩放送

返回顶部