使用 musl-cross-make 构建静态版本的 CMake
本指南介绍如何使用 musl-cross-make 构建一个 完全静态链接的 CMake 可执行文件,方便部署到其他 Linux 系统或集成到交叉工具链中。
一、准备依赖环境
sudo apt update
sudo apt install -y build-essential git wget ca-certificates
二、构建 musl 静态交叉工具链
1. 克隆仓库
git clone https://github.com/richfelker/musl-cross-make.git
cd musl-cross-make
2. 创建 config.mak 文件
TARGET = x86_64-linux-musl
OUTPUT = /opt/musl-cross
3. 处理证书验证失败(可选)
如果 wget 下载失败,提示证书无法验证,需要修改 Makefile文件:
将以下错误配置:
DL_CMD = wget -c -O --no-check-certificate
替换为正确写法:
DL_CMD = wget --no-check-certificate -c -O
或者直接设置环境变量:
export DL_CMD="wget --no-check-certificate -c -O"
4. 开始构建
make -j$(nproc)
sudo make install
构建成功后,交叉工具链位于 /opt/musl-cross/bin/,包含:
- x86_64-linux-musl-gcc
- x86_64-linux-musl-g++
三、构建静态版本的 CMake
1. 下载并解压 CMake 源码
wget https://github.com/Kitware/CMake/releases/download/v4.0.3/cmake-4.0.3.tar.gz
tar -xzf cmake-4.0.3.tar.gz
cd cmake-4.0.3
2. 设置环境变量(使用 musl 工具链)
export CC=/opt/musl-cross/bin/x86_64-linux-musl-gcc
export CXX=/opt/musl-cross/bin/x86_64-linux-musl-g++
export CFLAGS="-static"
export CXXFLAGS="-static"
export LDFLAGS="-static"
3. 执行 bootstrap 构建配置
./bootstrap --prefix=/opt/cmake-static \
--no-system-libs \
--parallel=$(nproc) \
-- \
-DCMAKE_USE_OPENSSL=OFF \
-DCMAKE_USE_SYSTEM_LIBIDN2=OFF
4. 编译并安装
make -j$(nproc)
make install
四、验证静态 CMake 是否构建成功
ldd /opt/cmake-static/bin/cmake
如果输出为:
not a dynamic executable
或者
不是动态可执行文件
表示成功编译为纯静态链接的可执行文件。
五、集成到交叉工具链中(可选)
将编译好的cmake文件夹,(包含bin、share、doc)拷贝到交叉编译工具链toolchain中,对简单项目直接拷贝bin即可,对复杂项目,需要用到FindPackaged之类的功能的,可以把share也拷贝过去。