这是一个 CMake 构建配置文件 (CMakeLists.txt),用于构建一个名为 AppPluginDefault 的 Qt 动态库插件。下面我来逐部分解释:
1. 基础配置
cmake
cmake_minimum_required(VERSION 3.27)
set(PROJECT_NAME AppPluginDefault)
project(${PROJECT_NAME} LANGUAGES CXX)
- 要求 CMake 最低版本 3.27
- 定义项目名称为
AppPluginDefault - 使用 C++ 语言
2. C++ 标准与 Qt 设置
cmake
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
- 使用 C++14 标准
- 启用 Qt 的 MOC (元对象编译器)、RCC (资源编译器)、UIC(界面编译器)自动处理
3. 源文件、头文件、UI 文件
cmake
set(SOURCES ...)
set(HEADERS ...)
set(FORMS ...)
- 列出了这个插件涉及的所有
.cpp、.h和.ui文件 - 包含
DragShadow2/子目录下的文件 - 主要功能文件有:
MainWindow--- 主窗口CWdtConfigList--- 配置列表ToolWindow--- 工具窗口DeleteRouteDialog/SelectIpPortDialog--- 对话框
4. 创建动态库
cmake
add_library(${PROJECT_NAME} SHARED ...)
- 生成一个 共享库(.so/.dll),即插件
5. 编译定义
cmake
target_compile_definitions(${PROJECT_NAME} PRIVATE
QT_DEPRECATED_WARNINGS
QS_LOG_SEPARATE_THREAD
QS_LOG_LINE_NUMBERS
QS_LOG_DEBUG_NOQUOTE
PRINT_THREAD_ID
)
- 定义了一些预处理宏:
QT_DEPRECATED_WARNINGS--- 启用 Qt 弃用警告QS_LOG_*--- 与QsLog日志库相关的配置PRINT_THREAD_ID--- 打印线程 ID
6. 链接库
cmake
target_link_libraries(${PROJECT_NAME} PRIVATE
Qt${QT_VERSION_MAJOR}::Core
Qt${QT_VERSION_MAJOR}::Gui
Qt${QT_VERSION_MAJOR}::Widgets
Qt${QT_VERSION_MAJOR}::Network
QsLog
PluginManager
PluginAPI
Utils
)
- 链接了 Qt 核心模块(Core、Gui、Widgets、Network)
- 还链接了多个 自定义库 ,说明这个插件依赖整个项目的架构:
- 插件管理、系统配置
7. 头文件搜索路径
cmake
target_include_directories(${PROJECT_NAME} PRIVATE ...)
- 指定了项目内各模块的头文件路径
- 包含
thirdPartys/QsLog、libs/、shares/等目录
8. 输出目录配置
cmake
set_target_properties(${PROJECT_NAME} PROPERTIES
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/plugins/app"
...
)
- 将所有配置(Debug、Release、RelWithDebInfo、MinSizeRel)的输出目录统一 为
bin/plugins/app/ - 避免 MSVC 默认追加
Debug/Release子目录,方便统一加载插件