StudyQt/CMakeLists.txt

94 lines
4.9 KiB
CMake
Raw Permalink Normal View History

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