SRecord 是一套用于处理 EPROM/HEX/SREC 文件的命令行工具,常用工具包括:

  • srec_cat
  • srec_cmp
  • srec_info

本文介绍如何在 Windows 下使用 MSYS2 + Clang + Ninja 编译,并解决常见 DLL 依赖问题。


环境准备

安装 MSYS2 Clang64 环境依赖:

1pacman -S --needed \
2  mingw-w64-clang-x86_64-toolchain \
3  mingw-w64-clang-x86_64-cmake \
4  mingw-w64-clang-x86_64-ninja \
5  git

检查工具:

1clang --version
2cmake --version
3ninja --version

获取源码

1git clone https://github.com/sierrafoxtrot/srecord.git

基础编译配置

1cmake -G Ninja \
2  -S . \
3  -B build \
4  -DCMAKE_BUILD_TYPE=Release \
5  -DCMAKE_C_COMPILER=clang \
6  -DCMAKE_CXX_COMPILER=clang++ \
7  -DBUILD_SHARED_LIBS=OFF

编译三个核心工具

1cmake --build build --target srec_cat srec_cmp srec_info -j12

build.sh

 1#!/usr/bin/env bash
 2set -e
 3
 4# ===== repo =====
 5REPO="https://github.com/sierrafoxtrot/srecord.git"
 6DIR="srecord"
 7BUILD="build"
 8
 9# ===== clean build =====
10echo "== clean build =="
11rm -rf "$BUILD"
12
13
14# ===== cmake configure (关键:强制 ninja + 关闭 doc) =====
15echo "== cmake configure =="
16
17cmake -G Ninja \
18  -S . \
19  -B build \
20  -DCMAKE_BUILD_TYPE=Release \
21  -DCMAKE_C_COMPILER=clang \
22  -DCMAKE_CXX_COMPILER=clang++ \
23  -DBUILD_SHARED_LIBS=OFF \
24  -DCMAKE_EXE_LINKER_FLAGS="-static" \
25  -DCMAKE_C_FLAGS="-O2 -flto" \
26  -DHAVE_GCRYPT_H=OFF \
27  -DCMAKE_CXX_FLAGS="-O2 -flto"
28
29# ===== build =====
30echo "== build =="
31# cmake --build build --target help
32cmake --build $BUILD --target srec_cat srec_cmp srec_info -j12
33
34# ===== result =====
35echo "== output exe =="
36find . -type f -name "srec_*.exe"
37
38echo "== done =="

总结

最终目标:

👉 生成 srec_cat.exe srec_cmp.exe srec_info.exe