二、 最低版本号
cmake_minimum_required(VERSION 3.5)
三、 指定项目名、项目版本、编程语言
project(HelloQt VERSION 0.1 LANGUAGES CXX)
C. 编程语言
LANGUAGES CXX(CXX代表c++)
四、 自动将当前源目录和构建目录添加到包含路径
set(CMAKE_INCLUDE_CURRENT_DIR ON)
五、 自动UIC、MOC、RCC
A. UI(界面)
set(CMAKE_AUTOUIC ON)
B. 元对象系统
set(CMAKE_AUTOMOC ON)
C. 资源文件
set(CMAKE_AUTORCC ON)
六、 启用c++17标准
set(CMAKE_CXX_STANDARD 17)
七、 设置指定的C++标准是必须的(如果不支持C++17则无法生成),如果不设置,或者为OFF,则指定版本不可用时,会使用上一版本
set(CMAKE_CXX_STANDARD_REQUIRED ON)
八、 查找Qt库版本
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
九、 查找当前Qt版本的Widget模块
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
十、 项目中的源文件、头文件、资源文件
set(PROJECT_SOURCES
main.cpp # 源文件
mainwindow.cpp
mainwindow.h # 头文件
)
十一、 判断qt版本
A. #如果是Qt6及以上版本
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
qt_add_executable(HelloQt
MANUAL_FINALIZATION #指示要手动终止可执行程序的生成
${PROJECT_SOURCES}
)
#安卓开发
# Define target properties for Android with Qt 6 as:
# set_property(TARGET HelloQt APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
# ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
else()
if(ANDROID)
add_library(HelloQt 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")
#其他Qt6以下版本使用这个
else()
add_executable(HelloQt
${PROJECT_SOURCES}
)
endif()
endif()
十二、 把Qt::Widgets模块的库连接到HelloQt
A. target_link_libraries(HelloQt PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
set_target_properties(HelloQt PROPERTIES
MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
MACOSX_BUNDLE TRUE #在 macOS 或 iOS 上将可执行文件构建为应用程序包。
WIN32_EXECUTABLE TRUE #在 Windows 上构建一个带有 WinMain 入口点的可执行文件。
)
#如果大于Qt6 则手动终止可执行程序的生成
if(QT_VERSION_MAJOR EQUAL 6)
qt_finalize_executable(HelloQt)
endif()