源码编译与开发环境搭建
第十二章 源码编译与开发环境搭建
12.1 开发环境概述
12.1.1 开发工具选择
LibreCAD支持多种开发环境:
| 环境 | 平台 | 推荐度 |
|---|---|---|
| Qt Creator | 全平台 | ★★★★★ |
| Visual Studio + Qt插件 | Windows | ★★★★☆ |
| CLion | 全平台 | ★★★☆☆ |
| VSCode + CMake | 全平台 | ★★★☆☆ |
12.1.2 依赖库
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| Qt | 6.4.0 | GUI框架(2.2.2分支) |
| Boost | 1.55.0 | C++工具库 |
| muParser | 2.3.0 | 数学表达式解析 |
| libdxfrw | - | DXF/DWG文件读写 |
12.1.3 构建系统
LibreCAD支持两种构建系统:
CMake(推荐):
- 现代化的构建系统
- 更好的IDE集成
- 跨平台支持
qmake:
- Qt原生构建工具
- 传统方式
- 简单项目适用
12.2 Windows环境搭建
12.2.1 安装Qt
使用Qt在线安装器:
- 下载Qt Online Installer:https://www.qt.io/download-open-source
- 运行安装程序
- 选择组件:
- Qt 6.x.x(最新稳定版)
- MinGW x64
- Qt 5 Compatibility Module
- Qt Shader Tools
- Developer and Designer Tools
- CMake
- Ninja
- MinGW x64
- Qt 6.x.x(最新稳定版)
安装路径:
建议安装到 C:\Qt
12.2.2 安装Boost
方法一:预编译包
- 下载预编译的Boost库
- 解压到
C:\local\boost_1_85_0
方法二:从源码编译
# 下载Boost源码
# 解压后进入目录
# 运行bootstrap
.\bootstrap.bat
# 编译(MinGW)
.\b2 toolset=gcc --build-type=complete --prefix=C:\Boost install
12.2.3 获取源码
# 克隆仓库
git clone https://github.com/LibreCAD/LibreCAD.git
# 初始化子模块
cd LibreCAD
git submodule update --init --recursive
# 切换到稳定分支
git checkout 2.2.2
12.2.4 使用Qt Creator编译
打开项目:
- 打开Qt Creator
- 文件 > 打开文件或项目
- 选择
CMakeLists.txt或librecad.pro
配置CMake(如使用CMake):
- 选择构建套件(MinGW 64-bit)
- 配置CMake变量:
BOOST_ROOT=C:/local/boost_1_85_0 - 运行CMake
编译:
- 点击"构建" > "构建项目"
- 或按 Ctrl+B
12.2.5 使用Visual Studio编译
安装VS和Qt VS Tools:
- 安装Visual Studio 2022
- 安装Qt VS Tools扩展
- 在VS中配置Qt版本
打开项目:
- 使用CMake生成VS解决方案:
mkdir build cd build cmake -G "Visual Studio 17 2022" -A x64 .. - 打开生成的.sln文件
设置环境变量:
set BOOST_ROOT=C:\local\boost_1_85_0
set BOOST_LIBRARYDIR=C:\local\boost_1_85_0\lib64-msvc-14.3
set QTDIR=C:\Qt\6.x.x\msvc2022_64
12.2.6 常见编译问题
问题1:找不到Qt
解决:设置CMAKE_PREFIX_PATH或QTDIR环境变量
cmake -DCMAKE_PREFIX_PATH=C:/Qt/6.6.0/mingw_64 ..
问题2:Boost链接错误
解决:确保Boost版本与编译器匹配
设置BOOST_ROOT和BOOST_LIBRARYDIR
问题3:编码问题
解决:确保源文件使用UTF-8编码
在CMake中添加:add_compile_options(/utf-8)
12.3 Linux环境搭建
12.3.1 Ubuntu/Debian
安装依赖:
# 更新包列表
sudo apt update
# 安装编译工具
sudo apt install build-essential cmake git
# 安装Qt6开发库
sudo apt install qt6-base-dev qt6-tools-dev libqt6svg6-dev \
qt6-l10n-tools libqt6core5compat6-dev
# 安装Boost
sudo apt install libboost-dev
# 安装muParser(可选,项目自带)
sudo apt install libmuparser-dev
12.3.2 Fedora/RHEL
# 安装编译工具
sudo dnf groupinstall "Development Tools"
sudo dnf install cmake git
# 安装Qt6
sudo dnf install qt6-qtbase-devel qt6-qtsvg-devel \
qt6-qttools-devel qt6-qt5compat-devel
# 安装Boost
sudo dnf install boost-devel
12.3.3 Arch Linux
# 安装依赖
sudo pacman -S base-devel cmake git qt6-base qt6-svg \
qt6-tools qt6-5compat boost
12.3.4 获取和编译源码
# 克隆仓库
git clone https://github.com/LibreCAD/LibreCAD.git
cd LibreCAD
git submodule update --init --recursive
# 使用CMake编译
mkdir build && cd build
cmake ..
make -j$(nproc)
# 或使用qmake编译
qmake ../librecad.pro
make -j$(nproc)
12.3.5 运行
# 进入输出目录
cd unix
# 运行LibreCAD
./librecad
12.4 macOS环境搭建
12.4.1 安装Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
12.4.2 安装依赖
# 安装编译工具
brew install cmake git
# 安装Qt6
brew install qt@6
# 安装Boost
brew install boost
# 设置Qt路径
export PATH="/opt/homebrew/opt/qt@6/bin:$PATH"
export LDFLAGS="-L/opt/homebrew/opt/qt@6/lib"
export CPPFLAGS="-I/opt/homebrew/opt/qt@6/include"
export PKG_CONFIG_PATH="/opt/homebrew/opt/qt@6/lib/pkgconfig"
12.4.3 编译
# 克隆并进入目录
git clone https://github.com/LibreCAD/LibreCAD.git
cd LibreCAD
git submodule update --init --recursive
# CMake编译
mkdir build && cd build
cmake -DCMAKE_PREFIX_PATH=/opt/homebrew/opt/qt@6 ..
make -j$(sysctl -n hw.ncpu)
# 或qmake编译
qmake ../librecad.pro
make -j$(sysctl -n hw.ncpu)
12.4.4 创建App Bundle
# 部署依赖
macdeployqt LibreCAD.app
# 签名(可选)
codesign --force --deep --sign - LibreCAD.app
12.5 CMake构建详解
12.5.1 CMakeLists.txt结构
cmake_minimum_required(VERSION 3.16)
project(LibreCAD)
# 设置C++标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 查找Qt
find_package(Qt6 REQUIRED COMPONENTS
Core Gui Widgets Svg PrintSupport)
# 查找Boost
find_package(Boost REQUIRED)
# 添加源文件
add_executable(librecad
${SOURCES}
${HEADERS}
${UI_FILES}
${RESOURCES}
)
# 链接库
target_link_libraries(librecad
Qt6::Core
Qt6::Gui
Qt6::Widgets
Qt6::Svg
Qt6::PrintSupport
Boost::boost
)
12.5.2 常用CMake变量
# 设置构建类型
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake -DCMAKE_BUILD_TYPE=Debug ..
# 设置Qt路径
cmake -DCMAKE_PREFIX_PATH=/path/to/qt ..
# 设置Boost路径
cmake -DBOOST_ROOT=/path/to/boost ..
# 启用测试
cmake -DBUILD_TESTS=ON ..
# 设置安装路径
cmake -DCMAKE_INSTALL_PREFIX=/usr/local ..
12.5.3 构建类型
| 类型 | 说明 | 用途 |
|---|---|---|
| Debug | 调试符号,无优化 | 开发调试 |
| Release | 完全优化 | 发布版本 |
| RelWithDebInfo | 优化+调试符号 | 性能分析 |
| MinSizeRel | 最小体积优化 | 嵌入式 |
12.6 项目结构
12.6.1 目录结构
LibreCAD/
├── CMakeLists.txt # CMake主配置
├── librecad.pro # qmake配置
├── librecad/
│ ├── src/
│ │ ├── main/ # 程序入口
│ │ ├── lib/ # 核心库
│ │ │ ├── engine/ # 图形引擎
│ │ │ ├── gui/ # GUI组件
│ │ │ ├── actions/ # 动作基类
│ │ │ ├── creation/ # 创建操作
│ │ │ ├── modification/# 修改操作
│ │ │ ├── information/# 信息查询
│ │ │ ├── math/ # 数学库
│ │ │ ├── filters/ # 文件过滤器
│ │ │ ├── fileio/ # 文件I/O
│ │ │ └── printing/ # 打印
│ │ ├── actions/ # 具体动作
│ │ ├── ui/ # UI文件
│ │ ├── cmd/ # 命令处理
│ │ └── plugins/ # 插件接口
│ ├── res/ # 资源文件
│ ├── ts/ # 翻译文件
│ └── support/ # 支持文件
├── plugins/ # 官方插件
├── libraries/ # 库文件
├── externals/ # 外部依赖
└── tools/ # 工具脚本
12.6.2 核心源文件
入口文件:
librecad/src/main/main.cpp:程序入口
核心类文件:
lib/engine/rs_entity.cpp:实体基类lib/engine/rs_graphic.cpp:图形文档lib/gui/rs_graphicview.cpp:图形视图lib/actions/rs_actioninterface.cpp:动作接口
UI文件:
ui/qc_applicationwindow.cpp:主窗口
12.7 调试技巧
12.7.1 Qt Creator调试
设置断点:
- 点击行号左侧添加断点
- 条件断点:右键断点 > 编辑
变量监视:
- 局部变量窗口
- 添加自定义表达式
调用栈:
- 查看函数调用链
- 跳转到调用位置
12.7.2 GDB调试
# 编译Debug版本
cmake -DCMAKE_BUILD_TYPE=Debug ..
make
# 启动GDB
gdb ./librecad
# 常用命令
(gdb) break RS_ActionDrawLine::mouseReleaseEvent
(gdb) run
(gdb) next
(gdb) step
(gdb) print variable
(gdb) backtrace
(gdb) continue
12.7.3 日志输出
// 使用Qt日志系统
qDebug() << "Debug message";
qInfo() << "Info message";
qWarning() << "Warning message";
qCritical() << "Critical error";
// LibreCAD调试输出
RS_DEBUG->print("Debug: %s", message);
RS_DEBUG->print(RS_Debug::D_ERROR, "Error: %s", message);
12.7.4 内存调试
# 使用Valgrind(Linux)
valgrind --leak-check=full ./librecad
# 使用AddressSanitizer
cmake -DCMAKE_CXX_FLAGS="-fsanitize=address" ..
12.8 单元测试
12.8.1 启用测试
# CMake配置时启用测试
cmake -DBUILD_TESTS=ON ..
make
12.8.2 运行测试
# 运行所有测试
./build/librecad_tests
# 或使用CTest
cd build
ctest --output-on-failure
12.8.3 测试框架
LibreCAD使用Qt Test框架:
#include <QtTest/QtTest>
class TestRSMath : public QObject {
Q_OBJECT
private slots:
void testAngleNormalize();
void testAngleDifference();
void testVectorOperations();
};
void TestRSMath::testAngleNormalize() {
QCOMPARE(RS_Math::correctAngle(2*M_PI + 0.1), 0.1);
QCOMPARE(RS_Math::correctAngle(-0.1), 2*M_PI - 0.1);
}
QTEST_MAIN(TestRSMath)
#include "test_rs_math.moc"
12.9 开发工作流
12.9.1 Git工作流
# 创建功能分支
git checkout -b feature/my-feature
# 开发和提交
git add .
git commit -m "Add new feature"
# 同步上游更改
git fetch origin
git rebase origin/master
# 推送分支
git push origin feature/my-feature
# 创建Pull Request
12.9.2 代码风格
LibreCAD使用特定的代码风格,可用astyle格式化:
# 使用项目的astyle配置
astyle --options=librecad.astylerc src/*.cpp
主要规范:
- 缩进:4个空格
- 括号:Allman风格
- 命名:驼峰命名法
12.9.3 提交规范
类型: 简短描述
详细描述...
类型包括:
- feat: 新功能
- fix: 修复Bug
- docs: 文档更新
- style: 代码格式
- refactor: 重构
- test: 测试
- chore: 构建/工具
12.10 本章小结
本章介绍了LibreCAD的源码编译和开发环境搭建:
- 开发环境:工具选择、依赖库、构建系统
- Windows环境:Qt安装、Boost安装、VS/Qt Creator配置
- Linux环境:包管理器安装依赖、编译步骤
- macOS环境:Homebrew安装、编译配置
- CMake构建:配置选项、构建类型
- 项目结构:目录组织、核心文件
- 调试技巧:Qt Creator调试、GDB、日志
- 单元测试:启用和运行测试
- 开发工作流:Git工作流、代码风格
掌握开发环境搭建是进行LibreCAD二次开发的第一步。

浙公网安备 33010602011771号