QT开发CmakeLists文件详解
# **指定当前所需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应用:基础篇 - 知乎 ()
在此感谢以上文章撰写者!
如有不妥,请联系本人处理!
标签: