【LibreCAD】 CMakeLists.txt 分析
项目基本信息
cmake_minimum_required(VERSION 3.28)
project(LibreCAD VERSION 2.2.2)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
主要配置
1. Qt 相关配置
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC_OPTIONS --connections string)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)find_package(Qt6 COMPONENTS Gui Core Widgets PrintSupport Svg Network REQUIRED)
find_package(Qt6 REQUIRED COMPONENTS LinguistTools)
2. 依赖库
find_package(Boost REQUIRED COMPONENTS)
find_package(Freetype)
3. 编译定义
add_compile_definitions(DWGSUPPORT)
add_compile_definitions(MUPARSER_STATIC)
add_compile_definitions(LC_VERSION=2.2.2.5-alpha)
add_compile_definitions(LC_PRERELEASE=true)
文件管理
1. 排除的文件模式
使用 file(GLOB_RECURSE AUTO_EXCLUDED_SOURCES ...)
定义了一些要排除的源文件模式。
2. 包含目录
大量的 include_directories()
调用,包含了项目的各个模块目录。
3. 源文件列表
set(SOURCES ...)
包含了大量的源文件:
- 资源文件 (.qrc)
- 库文件 (jwwlib, libdxfrw, muparser)
- 动作和操作相关的源文件
- 引擎核心文件
- UI 组件文件
- 插件相关文件
目标构建
主可执行文件
qt_add_executable(librecadlibrecad/src/main/main.cpp${SOURCES})target_link_libraries(librecad PRIVATE Qt6::Core Qt6::Widgets Qt6::Gui Qt6::PrintSupport Qt6::Svg Qt::Network)
国际化支持
qt_add_translations(librecad TS_FILE_DIR ${TS_DIR} TS_FILES ${TS_FILES})
install(TARGETS librecad RUNTIME DESTINATION bin)
工具和插件
# TTF 到 LFF 转换工具
add_executable(ttf2lff tools/ttf2lff/main.cpp)# 子目录
add_subdirectory(libraries/lciconengine)
add_subdirectory(plugins)
测试支持(可选)
option(BUILD_TESTS "Build unit tests for LibreCAD" OFF)
if(BUILD_TESTS)# 测试配置...
endif()
主要特点
- 模块化结构:代码按功能模块组织,包含引擎、UI、动作、过滤器等
- Qt6 支持:使用现代 Qt6 框架
- 国际化:支持多语言翻译
- 插件系统:支持插件扩展
- 跨平台:支持 Windows 和 Unix-like 系统
可改进的建议
- 使用
target_include_directories
替代旧的include_directories
- 将源文件分组到不同的变量中,提高可维护性
- 考虑使用 CMake 的
find_package
来管理第三方依赖 - 添加版本配置和安装规则
这个 CMakeLists.txt 文件整体结构清晰,但包含大量硬编码的路径和文件列表,可以考虑进一步模块化。