第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源码的架构和编译环境:

  1. 源码结构:了解了KiCad的目录组织和技术栈。
  2. 构建环境:学会了在各平台配置编译环境。
  3. CMake配置:掌握了构建选项和调试配置。
  4. 开发工具:配置了IDE和代码风格工具。
  5. 调试方法:学会了运行和调试开发版本。
  6. 单元测试:了解了测试框架和测试编写。
  7. 贡献流程:掌握了向KiCad贡献代码的流程。

通过本章学习,读者可以设置KiCad的开发环境并参与源码开发。


posted @ 2026-01-10 13:19  我才是银古  阅读(24)  评论(0)    收藏  举报