# cmake最低要求版本 3.5 cmake_minimum_required(VERSION 3.5) # 项目名称: 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 mainwindow.h 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} ) # 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) # 如果是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 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} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) if(QT_VERSION_MAJOR EQUAL 6) qt_finalize_executable(StudyQt) endif()