第16章-源码架构与编译环境
第十六章:源码架构与编译环境
16.1 KiCad源码概述
16.1.1 获取源码
# 从GitLab克隆(官方仓库)
git clone https://gitlab.com/kicad/code/kicad.git
# 从GitHub镜像克隆(只读)
git clone https://github.com/KiCad/kicad-source-mirror.git
# 克隆特定版本
git clone --branch 8.0 https://gitlab.com/kicad/code/kicad.git
16.1.2 源码目录结构
kicad/
├── 3d-viewer/ # 3D查看器
├── bitmap2component/ # 位图转元器件
├── cmake/ # CMake模块
├── common/ # 共享代码
│ ├── dialogs/ # 通用对话框
│ ├── draw_panel_gal.cpp
│ ├── eda_base_frame.cpp
│ └── ...
├── cvpcb/ # 封装关联工具
├── eeschema/ # 原理图编辑器
│ ├── dialogs/
│ ├── sch_*.cpp
│ ├── tools/
│ └── ...
├── gerbview/ # Gerber查看器
├── include/ # 公共头文件
├── kicad/ # 项目管理器
├── libs/ # 内部库
│ ├── kimath/ # 数学库
│ ├── kiplatform/ # 平台抽象
│ └── sexpr/ # S-Expression解析
├── pagelayout_editor/ # 页面布局编辑器
├── pcb_calculator/ # PCB计算器
├── pcbnew/ # PCB编辑器
│ ├── dialogs/
│ ├── router/ # 布线器
│ ├── tools/
│ └── ...
├── plugins/ # 插件框架
├── qa/ # 质量保证/测试
├── resources/ # 资源文件
├── scripting/ # Python脚本支持
├── thirdparty/ # 第三方代码
└── utils/ # 实用工具
16.1.3 主要技术栈
C++17 : 主要编程语言
wxWidgets 3.2+ : GUI框架
Boost : C++库扩展
OpenGL : 图形渲染
OpenCASCADE : 3D几何
ngspice : SPICE仿真
Python 3 : 脚本接口
CMake : 构建系统
16.2 构建环境配置
16.2.1 Windows环境
使用Visual Studio:
# 1. 安装Visual Studio 2022
# 选择"C++桌面开发"工作负载
# 2. 安装vcpkg
git clone https://github.com/microsoft/vcpkg
cd vcpkg
.\bootstrap-vcpkg.bat
# 3. 安装依赖
.\vcpkg install wxwidgets:x64-windows
.\vcpkg install boost:x64-windows
.\vcpkg install opencascade:x64-windows
.\vcpkg install glew:x64-windows
# 4. 配置环境变量
$env:VCPKG_ROOT = "C:\vcpkg"
CMake配置:
# 创建构建目录
mkdir build
cd build
# 配置项目
cmake .. -G "Visual Studio 17 2022" -A x64 `
-DCMAKE_TOOLCHAIN_FILE="C:/vcpkg/scripts/buildsystems/vcpkg.cmake"
# 编译
cmake --build . --config Release
16.2.2 Linux环境
Ubuntu/Debian:
# 安装依赖
sudo apt install build-essential cmake git \
libwxgtk3.0-gtk3-dev libglew-dev libglm-dev \
libcurl4-openssl-dev libboost-all-dev \
libpython3-dev python3-wxgtk4.0 \
swig libngspice0-dev libocct-*-dev \
libcairo2-dev libssl-dev
# 克隆源码
git clone https://gitlab.com/kicad/code/kicad.git
cd kicad
# 创建构建目录
mkdir build && cd build
# 配置
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DKICAD_SCRIPTING_WXPYTHON=ON \
-DCMAKE_INSTALL_PREFIX=/usr/local
# 编译(使用所有CPU核心)
make -j$(nproc)
# 安装
sudo make install
Fedora:
# 安装依赖
sudo dnf install cmake gcc-c++ wxGTK3-devel \
boost-devel python3-devel swig opencascade-devel \
glew-devel glm-devel libcurl-devel ngspice-devel
# 然后按照相同步骤构建
16.2.3 macOS环境
# 安装Homebrew依赖
brew install cmake wxwidgets boost python swig \
glew ngspice opencascade
# 克隆和配置
git clone https://gitlab.com/kicad/code/kicad.git
cd kicad
mkdir build && cd build
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DKICAD_SCRIPTING_WXPYTHON=ON \
-DCMAKE_OSX_DEPLOYMENT_TARGET=10.14
# 编译
make -j$(sysctl -n hw.ncpu)
16.3 CMake配置选项
16.3.1 常用配置选项
# 构建类型
-DCMAKE_BUILD_TYPE=Release|Debug|RelWithDebInfo
# 安装路径
-DCMAKE_INSTALL_PREFIX=/usr/local
# Python脚本支持
-DKICAD_SCRIPTING_WXPYTHON=ON|OFF
# 仿真支持
-DKICAD_SPICE=ON|OFF
# 3D功能
-DKICAD_USE_OCE=ON|OFF
-DKICAD_USE_OCC=ON|OFF
# 测试
-DKICAD_BUILD_QA_TESTS=ON|OFF
# 文档
-DKICAD_BUILD_DOCS=ON|OFF
16.3.2 调试构建
# 调试配置
cmake .. \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_CXX_FLAGS="-g -O0" \
-DKICAD_BUILD_QA_TESTS=ON
# 使用AddressSanitizer
cmake .. \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_CXX_FLAGS="-fsanitize=address -fno-omit-frame-pointer"
16.4 开发工具配置
16.4.1 IDE配置
VS Code配置:
// .vscode/settings.json
{
"cmake.configureSettings": {
"CMAKE_BUILD_TYPE": "Debug"
},
"cmake.buildDirectory": "${workspaceFolder}/build",
"C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools",
"files.associations": {
"*.kicad_sch": "lisp",
"*.kicad_pcb": "lisp"
}
}
// .vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug KiCad",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/kicad/kicad",
"args": [],
"cwd": "${workspaceFolder}",
"environment": [],
"MIMode": "gdb"
}
]
}
CLion配置:
1. 打开kicad目录作为CMake项目
2. 配置CMake选项
3. 选择构建配置
4. 设置运行/调试配置
16.4.2 代码风格
KiCad代码风格:
- 4空格缩进
- 花括号新行
- 类名Pascal命名
- 函数名小写下划线
- 成员变量m_前缀
格式化工具:
clang-format(使用项目.clang-format)
16.5 运行和调试
16.5.1 运行开发版本
# 设置环境变量
export KICAD_RUN_FROM_BUILD_DIR=1
export KICAD_SYMBOLS=${HOME}/kicad-symbols
export KICAD_FOOTPRINTS=${HOME}/kicad-footprints
# 运行
./build/kicad/kicad
# 或直接运行子程序
./build/pcbnew/pcbnew
./build/eeschema/eeschema
16.5.2 GDB调试
# 启动GDB调试
gdb ./build/kicad/kicad
# 常用GDB命令
(gdb) break main # 设置断点
(gdb) run # 运行
(gdb) backtrace # 查看调用栈
(gdb) print variable # 打印变量
(gdb) continue # 继续执行
16.5.3 日志和跟踪
// KiCad日志系统
#include <trace_helpers.h>
// 启用跟踪
wxLog::SetLogLevel(wxLOG_Debug);
// 输出日志
wxLogDebug("Debug message: %s", value);
wxLogMessage("Info message");
wxLogWarning("Warning message");
wxLogError("Error message");
16.6 单元测试
16.6.1 运行测试
# 构建测试
cmake .. -DKICAD_BUILD_QA_TESTS=ON
make qa_all
# 运行所有测试
cd build
ctest --output-on-failure
# 运行特定测试
./qa/qa_pcbnew/qa_pcbnew
./qa/qa_eeschema/qa_eeschema
16.6.2 编写测试
// qa/qa_pcbnew/test_example.cpp
#include <boost/test/unit_test.hpp>
#include <board.h>
BOOST_AUTO_TEST_SUITE(ExampleTests)
BOOST_AUTO_TEST_CASE(TestBoardCreation)
{
BOARD board;
BOOST_CHECK(board.IsEmpty());
}
BOOST_AUTO_TEST_CASE(TestTrackWidth)
{
PCB_TRACK track(nullptr);
track.SetWidth(pcbnew::FromMM(0.25));
BOOST_CHECK_EQUAL(track.GetWidth(), pcbnew::FromMM(0.25));
}
BOOST_AUTO_TEST_SUITE_END()
16.7 代码贡献
16.7.1 贡献流程
1. Fork项目
2. 创建功能分支
git checkout -b feature/my-feature
3. 开发和测试
4. 提交更改
git commit -m "Add feature X"
5. 推送到Fork
git push origin feature/my-feature
6. 创建Merge Request
16.7.2 代码审查
代码审查重点:
- 代码风格一致性
- 功能正确性
- 测试覆盖
- 文档更新
- 向后兼容性
16.8 本章小结
本章介绍了KiCad源码的架构和编译环境:
- 源码结构:了解了KiCad的目录组织和技术栈。
- 构建环境:学会了在各平台配置编译环境。
- CMake配置:掌握了构建选项和调试配置。
- 开发工具:配置了IDE和代码风格工具。
- 调试方法:学会了运行和调试开发版本。
- 单元测试:了解了测试框架和测试编写。
- 贡献流程:掌握了向KiCad贡献代码的流程。
通过本章学习,读者可以设置KiCad的开发环境并参与源码开发。

浙公网安备 33010602011771号