2023-07-29 17:07:15 +08:00
|
|
|
|
# cmake最低要求版本 3.5
|
2023-07-29 16:12:02 +08:00
|
|
|
|
cmake_minimum_required(VERSION 3.5)
|
|
|
|
|
|
2023-07-29 17:07:15 +08:00
|
|
|
|
# 项目名称: StudyQt 版本 1.0.0 使用的编程语言 cxx
|
|
|
|
|
project(StudyQt VERSION 1.0.0 LANGUAGES CXX)
|
|
|
|
|
# 将${PROJECT_VERSION}字符串按点号进行分割
|
|
|
|
|
string(REPLACE "." ";" VERSION_LIST "${PROJECT_VERSION}")
|
|
|
|
|
# 获取最后一位数字作为补丁版本号,-1是要获取的元素的索引,这里表示要获取列表中的最后一个元素
|
|
|
|
|
list(GET VERSION_LIST -1 PROJECT_VERSION_PATCH)
|
2023-07-29 16:12:02 +08:00
|
|
|
|
|
2023-07-29 17:07:15 +08:00
|
|
|
|
# 启用CMake的自动UI文件处理功能。当该选项打开时,CMake会自动查找项目中的.ui文件,
|
|
|
|
|
# 并生成相应的UI头文件,用于在代码中使用。这样,您无需手动编写UI文件的构建规则,CMake会自动处理。
|
2023-07-29 16:12:02 +08:00
|
|
|
|
set(CMAKE_AUTOUIC ON)
|
2023-07-29 17:07:15 +08:00
|
|
|
|
# 启用CMake的自动MOC文件处理功能。当该选项打开时,CMake会自动查找项目中的需要MOC处理的源文件(通常是包含了QObject的类的头文件),
|
|
|
|
|
# 并自动生成相应的MOC源文件,用于处理信号和槽的连接。这样,您无需手动编写MOC文件的构建规则,CMake会自动处理。
|
2023-07-29 16:12:02 +08:00
|
|
|
|
set(CMAKE_AUTOMOC ON)
|
2023-07-29 17:07:15 +08:00
|
|
|
|
# 启用CMake的自动资源文件处理功能。当该选项打开时,CMake会自动查找项目中的.qrc文件,并生成相应的资源文件代码,
|
|
|
|
|
# 用于在代码中使用。这样,您无需手动编写资源文件的构建规则,CMake会自动处理。
|
2023-07-29 16:12:02 +08:00
|
|
|
|
set(CMAKE_AUTORCC ON)
|
|
|
|
|
|
2023-07-29 17:07:15 +08:00
|
|
|
|
# 设置使用的C++标准为 C++17
|
2023-07-29 16:12:02 +08:00
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
2023-07-29 17:07:15 +08:00
|
|
|
|
# 该命令设置CMake要求使用所指定的C++标准。当这个选项打开时,CMake将确保编译器使用指定的C++标准编译项目。
|
|
|
|
|
# 如果编译器不支持所需的C++标准,CMake将报错并停止构建。
|
2023-07-29 16:12:02 +08:00
|
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
|
|
2023-07-29 17:07:15 +08:00
|
|
|
|
# 在系统中查找Qt库,首先尝试查找Qt6版本,如果找不到,则尝试查找Qt5版本。
|
|
|
|
|
# REQUIRED关键字表示必须找到并引入Qt库,否则CMake会报错。COMPONENTS Widgets表示需要引入Qt的Widgets组件。
|
2023-07-29 16:12:02 +08:00
|
|
|
|
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
|
2023-07-29 17:07:15 +08:00
|
|
|
|
# 使用了CMake的变量${QT_VERSION_MAJOR}来动态指定需要查找的Qt版本。
|
|
|
|
|
# ${QT_VERSION_MAJOR}会根据前面find_package(QT NAMES Qt6 Qt5 ...)命令中找到的Qt版本进行替换。
|
|
|
|
|
# 这样可以根据实际情况引入对应版本的Qt库。
|
2023-07-29 16:12:02 +08:00
|
|
|
|
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
|
|
|
|
|
|
2023-07-29 17:07:15 +08:00
|
|
|
|
# 定义了一个名为PROJECT_SOURCES的变量,其中包含了项目的源代码文件列表。
|
|
|
|
|
# 可以方便地在CMakeLists.txt文件中使用这个变量来指定项目的源代码文件列表
|
2023-07-29 16:12:02 +08:00
|
|
|
|
set(PROJECT_SOURCES
|
|
|
|
|
main.cpp
|
|
|
|
|
mainwindow.cpp
|
|
|
|
|
mainwindow.h
|
|
|
|
|
mainwindow.ui
|
|
|
|
|
)
|
|
|
|
|
|
2023-07-29 17:07:15 +08:00
|
|
|
|
# 如果是Qt6或更高版本,就会执行qt_add_executable命令
|
2023-07-29 16:12:02 +08:00
|
|
|
|
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
|
2023-07-29 17:07:15 +08:00
|
|
|
|
# qt_add_executable命令用于创建一个Qt应用程序,并将指定的源代码文件${PROJECT_SOURCES}包含在构建中。
|
|
|
|
|
# 另外,MANUAL_FINALIZATION选项告诉CMake不要自动为目标文件添加CMake的默认链接规则,而是手动控制目标文件的链接。
|
2023-07-29 16:12:02 +08:00
|
|
|
|
qt_add_executable(StudyQt
|
|
|
|
|
MANUAL_FINALIZATION
|
|
|
|
|
${PROJECT_SOURCES}
|
|
|
|
|
)
|
|
|
|
|
# Define target properties for Android with Qt 6 as:
|
|
|
|
|
# set_property(TARGET StudyQt 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)
|
2023-07-29 17:07:15 +08:00
|
|
|
|
# 如果是Android平台,将使用add_library命令创建一个共享库(shared library)目标。
|
2023-07-29 16:12:02 +08:00
|
|
|
|
add_library(StudyQt 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()
|
2023-07-29 17:07:15 +08:00
|
|
|
|
# 如果是其他平台,将使用add_executable命令创建一个可执行文件目标。
|
2023-07-29 16:12:02 +08:00
|
|
|
|
add_executable(StudyQt
|
|
|
|
|
${PROJECT_SOURCES}
|
|
|
|
|
)
|
|
|
|
|
endif()
|
|
|
|
|
endif()
|
|
|
|
|
|
2023-07-29 17:07:15 +08:00
|
|
|
|
# 将Qt Widgets库与目标StudyQt进行链接,以确保应用程序能够使用Qt Widgets功能。
|
2023-07-29 16:12:02 +08:00
|
|
|
|
target_link_libraries(StudyQt PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
|
2023-07-29 17:07:15 +08:00
|
|
|
|
# 设置目标StudyQt的属性。这些属性包括MacOSX Bundle的标识符、版本号和短版本号,以及指定目标为MacOSX Bundle和Win32可执行文件。
|
2023-07-29 16:12:02 +08:00
|
|
|
|
set_target_properties(StudyQt PROPERTIES
|
2023-07-29 17:07:15 +08:00
|
|
|
|
MACOSX_BUNDLE_GUI_IDENTIFIER studyqt.devwki.net
|
2023-07-29 16:12:02 +08:00
|
|
|
|
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
|
|
|
|
|
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
|
|
|
|
|
MACOSX_BUNDLE TRUE
|
|
|
|
|
WIN32_EXECUTABLE TRUE
|
|
|
|
|
)
|
|
|
|
|
|
2023-07-29 17:07:15 +08:00
|
|
|
|
# 将StudyQt目标安装到相应的目录下,如BUNDLE目标安装到当前目录,
|
|
|
|
|
# LIBRARY目标安装到${CMAKE_INSTALL_LIBDIR}目录,RUNTIME目标安装到${CMAKE_INSTALL_BINDIR}目录。
|
2023-07-29 16:12:02 +08:00
|
|
|
|
install(TARGETS StudyQt
|
|
|
|
|
BUNDLE DESTINATION .
|
|
|
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
|
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
if(QT_VERSION_MAJOR EQUAL 6)
|
|
|
|
|
qt_finalize_executable(StudyQt)
|
|
|
|
|
endif()
|