StudyQt/CMakeLists.txt
2023-07-29 17:07:15 +08:00

94 lines
4.9 KiB
CMake
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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()