diff --git a/CMakeLists.txt b/CMakeLists.txt index 0ad4694..27bf770 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,17 +1,39 @@ +# cmake最低要求版本 3.5 cmake_minimum_required(VERSION 3.5) -project(StudyQt VERSION 0.1 LANGUAGES CXX) +# 项目名称: 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) +# 启用CMake的自动UI文件处理功能。当该选项打开时,CMake会自动查找项目中的.ui文件, +# 并生成相应的UI头文件,用于在代码中使用。这样,您无需手动编写UI文件的构建规则,CMake会自动处理。 set(CMAKE_AUTOUIC ON) +# 启用CMake的自动MOC文件处理功能。当该选项打开时,CMake会自动查找项目中的需要MOC处理的源文件(通常是包含了QObject的类的头文件), +# 并自动生成相应的MOC源文件,用于处理信号和槽的连接。这样,您无需手动编写MOC文件的构建规则,CMake会自动处理。 set(CMAKE_AUTOMOC ON) +# 启用CMake的自动资源文件处理功能。当该选项打开时,CMake会自动查找项目中的.qrc文件,并生成相应的资源文件代码, +# 用于在代码中使用。这样,您无需手动编写资源文件的构建规则,CMake会自动处理。 set(CMAKE_AUTORCC ON) +# 设置使用的C++标准为 C++17 set(CMAKE_CXX_STANDARD 17) +# 该命令设置CMake要求使用所指定的C++标准。当这个选项打开时,CMake将确保编译器使用指定的C++标准编译项目。 +# 如果编译器不支持所需的C++标准,CMake将报错并停止构建。 set(CMAKE_CXX_STANDARD_REQUIRED ON) +# 在系统中查找Qt库,首先尝试查找Qt6版本,如果找不到,则尝试查找Qt5版本。 +# REQUIRED关键字表示必须找到并引入Qt库,否则CMake会报错。COMPONENTS Widgets表示需要引入Qt的Widgets组件。 find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets) +# 使用了CMake的变量${QT_VERSION_MAJOR}来动态指定需要查找的Qt版本。 +# ${QT_VERSION_MAJOR}会根据前面find_package(QT NAMES Qt6 Qt5 ...)命令中找到的Qt版本进行替换。 +# 这样可以根据实际情况引入对应版本的Qt库。 find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets) +# 定义了一个名为PROJECT_SOURCES的变量,其中包含了项目的源代码文件列表。 +# 可以方便地在CMakeLists.txt文件中使用这个变量来指定项目的源代码文件列表 set(PROJECT_SOURCES main.cpp mainwindow.cpp @@ -19,7 +41,10 @@ set(PROJECT_SOURCES mainwindow.ui ) +# 如果是Qt6或更高版本,就会执行qt_add_executable命令 if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) + # qt_add_executable命令用于创建一个Qt应用程序,并将指定的源代码文件${PROJECT_SOURCES}包含在构建中。 + # 另外,MANUAL_FINALIZATION选项告诉CMake不要自动为目标文件添加CMake的默认链接规则,而是手动控制目标文件的链接。 qt_add_executable(StudyQt MANUAL_FINALIZATION ${PROJECT_SOURCES} @@ -30,28 +55,33 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) # For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation else() if(ANDROID) + # 如果是Android平台,将使用add_library命令创建一个共享库(shared library)目标。 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() + # 如果是其他平台,将使用add_executable命令创建一个可执行文件目标。 add_executable(StudyQt ${PROJECT_SOURCES} ) endif() endif() +# 将Qt Widgets库与目标StudyQt进行链接,以确保应用程序能够使用Qt Widgets功能。 target_link_libraries(StudyQt PRIVATE Qt${QT_VERSION_MAJOR}::Widgets) - +# 设置目标StudyQt的属性。这些属性包括MacOSX Bundle的标识符、版本号和短版本号,以及指定目标为MacOSX Bundle和Win32可执行文件。 set_target_properties(StudyQt PROPERTIES - MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com + MACOSX_BUNDLE_GUI_IDENTIFIER studyqt.devwki.net MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} MACOSX_BUNDLE TRUE WIN32_EXECUTABLE TRUE ) +# 将StudyQt目标安装到相应的目录下,如BUNDLE目标安装到当前目录, +# LIBRARY目标安装到${CMAKE_INSTALL_LIBDIR}目录,RUNTIME目标安装到${CMAKE_INSTALL_BINDIR}目录。 install(TARGETS StudyQt BUNDLE DESTINATION . LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}