Solidity 编译器 CMake 配置选项完全指南
本指南详细介绍 Solidity 编译器构建系统中所有可用的 CMake 配置选项。了解这些选项将使您能够根据特定需求自定义 Solidity 编译器的构建过程,优化性能,启用特定功能,或满足特殊环境要求。
目录
- CMake 基础概念
- 基本构建选项
- 编译器和工具链选项
- 依赖项配置选项
- 功能开关和模块选项
- 优化和性能选项
- 调试和测试选项
- 平台特定选项
- 安装和路径选项
- 高级和实验性选项
- 组合配置实例
- 故障排除
1. CMake 基础概念
CMake 简介
CMake 是 Solidity 项目使用的跨平台构建系统生成器。它使用 CMakeLists.txt
文件定义构建过程,并可以为各种平台和构建工具生成原生构建文件(如 Makefiles、Visual Studio 项目等)。
设置 CMake 选项的基本语法
CMake 选项可以通过命令行或 CMake GUI 设置:
bash
# 命令行语法
cmake -D选项名=值 [其他选项] ..
# 示例
cmake -DCMAKE_BUILD_TYPE=Release -DUSE_Z3=OFF ..
检查可用选项
要查看 Solidity 项目支持的 CMake 选项:
bash
# 列出缓存的变量(在已配置的构建目录中)
cmake -L ..
# 列出缓存的变量及其帮助字符串
cmake -LH ..
# 列出高级缓存变量
cmake -LA ..
2. 基本构建选项
CMAKE_BUILD_TYPE
控制生成的构建类型,这影响编译器优化级别和调试信息。
bash
# 语法
-DCMAKE_BUILD_TYPE=<类型>
# 可能的值
- Debug: 包含调试信息,无优化,适合开发和调试
- Release: 优化代码性能,无调试信息,适合生产使用
- RelWithDebInfo: 包含调试信息并进行一些优化,性能和调试的平衡
- MinSizeRel: 优化代码大小,适合空间受限的环境
# 示例
cmake -DCMAKE_BUILD_TYPE=Release ..
默认值:RelWithDebInfo
BUILD_SHARED_LIBS
确定是构建动态库(.so/.dll/.dylib)还是静态库(.a/.lib)。
bash
# 语法
-DBUILD_SHARED_LIBS=<ON|OFF>
# 示例
cmake -DBUILD_SHARED_LIBS=OFF .. # 构建静态库
默认值:OFF
(构建静态库)
CMAKE_VERBOSE_MAKEFILE
启用详细的构建输出,显示完整的编译命令。
bash
# 语法
-DCMAKE_VERBOSE_MAKEFILE=<ON|OFF>
# 示例
cmake -DCMAKE_VERBOSE_MAKEFILE=ON ..
默认值:OFF
CMAKE_EXPORT_COMPILE_COMMANDS
生成 compile_commands.json
文件,包含完整的编译命令,对集成开发环境和代码分析工具有用。
bash
# 语法
-DCMAKE_EXPORT_COMPILE_COMMANDS=<ON|OFF>
# 示例
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..
默认值:OFF
3. 编译器和工具链选项
CMAKE_C_COMPILER / CMAKE_CXX_COMPILER
指定要使用的 C 和 C++ 编译器。
bash
# 语法
-DCMAKE_C_COMPILER=<路径>
-DCMAKE_CXX_COMPILER=<路径>
# 示例
cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ..
cmake -DCMAKE_C_COMPILER=gcc-11 -DCMAKE_CXX_COMPILER=g++-11 ..
默认值:系统默认编译器
CMAKE_C_FLAGS / CMAKE_CXX_FLAGS
提供额外的编译器标志。
bash
# 语法
-DCMAKE_C_FLAGS="<标志>"
-DCMAKE_CXX_FLAGS="<标志>"
# 示例 - 启用更严格的警告检查
cmake -DCMAKE_CXX_FLAGS="-Wall -Wextra -Werror" ..
# 示例 - 启用特定 CPU 优化
cmake -DCMAKE_CXX_FLAGS="-march=native" ..
可以使用特定构建类型的标志:
CMAKE_C_FLAGS_DEBUG
/CMAKE_CXX_FLAGS_DEBUG
CMAKE_C_FLAGS_RELEASE
/CMAKE_CXX_FLAGS_RELEASE
CMAKE_C_FLAGS_RELWITHDEBINFO
/CMAKE_CXX_FLAGS_RELWITHDEBINFO
CMAKE_C_FLAGS_MINSIZEREL
/CMAKE_CXX_FLAGS_MINSIZEREL
CMAKE_TOOLCHAIN_FILE
使用特定的工具链文件,对交叉编译或使用自定义工具集特别有用。
bash
# 语法
-DCMAKE_TOOLCHAIN_FILE=<文件路径>
# 示例 - 使用 vcpkg
cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/vcpkg/scripts/buildsystems/vcpkg.cmake ..
# 示例 - 交叉编译
cmake -DCMAKE_TOOLCHAIN_FILE=./cmake/toolchains/arm-linux-gnueabihf.cmake ..
CMAKE_CXX_STANDARD
指定使用的 C++ 标准。
bash
# 语法
-DCMAKE_CXX_STANDARD=<11|14|17|20>
# 示例
cmake -DCMAKE_CXX_STANDARD=17 ..
默认值:Solidity 项目通常使用 17
(C++17)
CMAKE_<LANG>_COMPILER_LAUNCHER
指定编译器启动器,如 ccache 或 sccache,可以显著加速重复构建。
bash
# 语法
-DCMAKE_C_COMPILER_LAUNCHER=<启动器>
-DCMAKE_CXX_COMPILER_LAUNCHER=<启动器>
# 示例
cmake -DCMAKE_CXX_COMPILER_LAUNCHER=ccache ..
4. 依赖项配置选项
Boost 设置
配置 Boost 库的位置和使用方式。
bash
# 语法
-DBOOST_ROOT=<路径> # Boost 安装路径
-DBoost_USE_STATIC_LIBS=<ON|OFF> # 使用静态 Boost 库
# 示例
cmake -DBOOST_ROOT=/opt/boost-1.74.0 -DBoost_USE_STATIC_LIBS=ON ..
Z3 和 CVC4 求解器设置
启用/禁用或配置 SMT 求解器。
bash
# 启用/禁用 Z3 SMT 求解器
-DUSE_Z3=<ON|OFF>
# 启用/禁用 CVC4 SMT 求解器
-DUSE_CVC4=<ON|OFF>
# 指定 Z3 安装路径
-DZ3_ROOT=<路径>
# 指定 CVC4 安装路径
-DCVC4_ROOT=<路径>
# 示例
cmake -DUSE_Z3=ON -DZ3_ROOT=/usr/local/z3-4.8.12 ..
cmake -DUSE_CVC4=ON -DUSE_Z3=OFF -DCVC4_ROOT=/opt/cvc4 ..
默认值:
USE_Z3
:ON
USE_CVC4
:OFF
EVMONE
启用/禁用使用 evmone EVM 实现。
bash
# 语法
-DUSE_EVMONE=<ON|OFF>
# 示例
cmake -DUSE_EVMONE=OFF ..
默认值: ON
5. 功能开关和模块选项
SOLC_LINK_STATIC
控制 solc 可执行文件的链接方式,静态链接可提高可移植性。
bash
# 语法
-DSOLC_LINK_STATIC=<ON|OFF>
# 示例
cmake -DSOLC_LINK_STATIC=ON ..
默认值:OFF
(默认动态链接)
SOLC_DISABLE_JUMBOHASH_SUPPORT
控制是否禁用对大型哈希(jumbo hash)的支持。
bash
# 语法
-DSOLC_DISABLE_JUMBOHASH_SUPPORT=<ON|OFF>
# 示例
cmake -DSOLC_DISABLE_JUMBOHASH_SUPPORT=ON ..
默认值:OFF
SOLC_INSTALL
控制是否安装 solc 可执行文件。
bash
# 语法
-DSOLC_INSTALL=<ON|OFF>
# 示例
cmake -DSOLC_INSTALL=OFF ..
默认值:ON
BUILD_SOLC
控制是否构建 solc
命令行可执行文件。
bash
# 语法
-DBUILD_SOLC=<ON|OFF>
# 示例
cmake -DBUILD_SOLC=OFF .. # 仅构建库,不构建可执行文件
默认值:ON
LLL
控制是否启用 LLL(低级类 Lisp 语言)支持,现在基本已弃用。
bash
# 语法
-DLLL=<ON|OFF>
# 示例
cmake -DLLL=ON ..
默认值:OFF
6. 优化和性能选项
CMAKE_INTERPROCEDURAL_OPTIMIZATION
启用链接时优化(LTO),可以提高运行时性能但增加构建时间。
bash
# 语法
-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=<ON|OFF>
# 示例
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON ..
默认值:OFF
USE_CCACHE
启用 ccache 缓存编译结果,加速增量构建。
bash
# 语法
-DUSE_CCACHE=<ON|OFF>
# 示例
cmake -DUSE_CCACHE=ON ..
默认值:取决于是否找到 ccache
OPTIMIZE
控制是否为 Solidity 编译器本身启用优化。
bash
# 语法
-DOPTIMIZE=<ON|OFF>
# 示例
cmake -DOPTIMIZE=OFF .. # 禁用优化,可能用于调试
默认值:对于 Release 构建为 ON
7. 调试和测试选项
TESTS
控制是否构建测试。
bash
# 语法
-DTESTS=<ON|OFF>
# 示例
cmake -DTESTS=OFF .. # 跳过构建测试,加快构建速度
默认值:ON
TOOLS
控制是否构建工具。
bash
# 语法
-DTOOLS=<ON|OFF>
# 示例
cmake -DTOOLS=OFF .. # 不构建附加工具
默认值:ON
COVERAGE
启用代码覆盖率分析,适用于测试。
bash
# 语法
-DCOVERAGE=<ON|OFF>
# 示例
cmake -DCOVERAGE=ON ..
默认值:OFF
PROFILE
启用性能分析工具集成。
bash
# 语法
-DPROFILE=<ON|OFF>
# 示例
cmake -DPROFILE=ON ..
默认值:OFF
ASAN
启用地址消毒工具 (Address Sanitizer) 进行内存错误检测。
bash
# 语法
-DASAN=<ON|OFF>
# 示例
cmake -DASAN=ON -DCMAKE_BUILD_TYPE=Debug ..
默认值:OFF
UBSAN
启用未定义行为消毒工具 (Undefined Behavior Sanitizer) 进行错误检测。
bash
# 语法
-DUBSAN=<ON|OFF>
# 示例
cmake -DUBSAN=ON -DCMAKE_BUILD_TYPE=Debug ..
默认值:OFF
TSAN
启用线程消毒工具 (Thread Sanitizer) 进行线程安全性检测。
bash
# 语法
-DTSAN=<ON|OFF>
# 示例
cmake -DTSAN=ON -DCMAKE_BUILD_TYPE=Debug ..
默认值:OFF
OSSFUZZ
构建模糊测试目标。
bash
# 语法
-DOSSFUZZ=<ON|OFF>
# 示例
cmake -DOSSFUZZ=ON ..
默认值:OFF
8. 平台特定选项
EMSCRIPTEN
启用 Emscripten 支持,用于编译到 WebAssembly/JavaScript。
bash
# 语法
-DEMSCRIPTEN=<ON|OFF>
# 示例
emcmake cmake -DEMSCRIPTEN=ON ..
默认值:自动根据环境检测
CMAKE_OSX_ARCHITECTURES
指定 macOS 构建的目标架构。
bash
# 语法
-DCMAKE_OSX_ARCHITECTURES=<架构>
# 示例 - 为 Apple Silicon 构建
cmake -DCMAKE_OSX_ARCHITECTURES=arm64 ..
# 示例 - 构建通用二进制(Intel 和 Apple Silicon)
cmake -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" ..
SOLC_PEDANTIC
在支持的平台上启用额外的编译器警告。
bash
# 语法
-DSOLC_PEDANTIC=<ON|OFF>
# 示例
cmake -DSOLC_PEDANTIC=ON ..
默认值: ON
9. 安装和路径选项
CMAKE_INSTALL_PREFIX
设置安装位置前缀。
bash
# 语法
-DCMAKE_INSTALL_PREFIX=<路径>
# 示例
cmake -DCMAKE_INSTALL_PREFIX=/opt/solidity ..
默认值:Linux/macOS 上为 /usr/local
,Windows 上为 C:\Program Files\solidity
CMAKE_INSTALL_LIBDIR
指定库安装目录名称,相对于 CMAKE_INSTALL_PREFIX
。
bash
# 语法
-DCMAKE_INSTALL_LIBDIR=<目录>
# 示例
cmake -DCMAKE_INSTALL_LIBDIR=lib64 ..
默认值:通常为 lib
或 lib64
(取决于平台)
CMAKE_INSTALL_BINDIR
指定可执行文件安装目录名称,相对于 CMAKE_INSTALL_PREFIX
。
bash
# 语法
-DCMAKE_INSTALL_BINDIR=<目录>
# 示例
cmake -DCMAKE_INSTALL_BINDIR=bin ..
默认值:通常为 bin
CMAKE_PREFIX_PATH
添加额外的路径用于查找包。
bash
# 语法
-DCMAKE_PREFIX_PATH=<路径>
# 示例
cmake -DCMAKE_PREFIX_PATH="/opt/boost;/opt/z3" ..
10. 高级和实验性选项
VIA_IR
启用通过 IR 优化的编译(实验性)。
bash
# 语法
-DVIA_IR=<ON|OFF>
# 示例
cmake -DVIA_IR=ON ..
默认值:OFF
USE_Z3_DLOPEN
使用动态加载 Z3 库而不是静态链接。
bash
# 语法
-DUSE_Z3_DLOPEN=<ON|OFF>
# 示例
cmake -DUSE_Z3_DLOPEN=ON ..
默认值:OFF
STRICT_Z3_VERSION
在构建时对 Z3 版本进行严格检查。
bash
# 语法
-DSTRICT_Z3_VERSION=<ON|OFF>
# 示例
cmake -DSTRICT_Z3_VERSION=OFF .. # 允许使用不同版本的 Z3
默认值:ON
OLD_Z3_LIBRARIES
使用旧版 Z3 库名称。
bash
# 语法
-DOLD_Z3_LIBRARIES=<ON|OFF>
# 示例
cmake -DOLD_Z3_LIBRARIES=ON ..
默认值:OFF
Z3_INCLUDE_DIR / Z3_LIBRARIES
手动指定 Z3 包含目录和库路径。
bash
# 语法
-DZ3_INCLUDE_DIR=<路径>
-DZ3_LIBRARIES=<路径>
# 示例
cmake -DZ3_INCLUDE_DIR=/opt/z3/include -DZ3_LIBRARIES=/opt/z3/lib/libz3.so ..
11. 组合配置实例
以下是一些常见使用场景的组合配置示例。
标准发布构建
bash
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_FLAGS="-O3" \
..
创建便携静态二进制文件
bash
cmake -DCMAKE_BUILD_TYPE=Release \
-DSOLC_LINK_STATIC=ON \
-DBoost_USE_STATIC_LIBS=ON \
-DUSE_Z3_DLOPEN=OFF \
..
开发者调试构建
bash
cmake -DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DCMAKE_CXX_FLAGS="-Wall -Wextra -Werror" \
-DTESTS=ON \
..
优化性能的构建
bash
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \
-DCMAKE_CXX_FLAGS="-O3 -march=native" \
-DUSE_Z3=OFF \ # 如果不需要 SMT 功能
..
快速构建(跳过测试和工具)
bash
cmake -DCMAKE_BUILD_TYPE=Release \
-DTESTS=OFF \
-DTOOLS=OFF \
-DUSE_CCACHE=ON \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
..
内存安全分析构建
bash
cmake -DCMAKE_BUILD_TYPE=Debug \
-DASAN=ON \
-DUBSAN=ON \
..
交叉编译 ARM64 构建
bash
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_SYSTEM_NAME=Linux \
-DCMAKE_SYSTEM_PROCESSOR=aarch64 \
-DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc \
-DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ \
-DSOLC_LINK_STATIC=ON \
..
自定义安装路径
bash
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/opt/solidity \
-DCMAKE_INSTALL_LIBDIR=lib \
..
模糊测试构建
bash
cmake -DCMAKE_BUILD_TYPE=Release \
-DOSSFUZZ=ON \
..
12. 故障排除
找不到依赖项
问题:CMake 无法找到所需的依赖项,如 Boost 或 Z3。
解决方案:
bash
# 指定 Boost 位置
cmake -DBOOST_ROOT=/path/to/boost ..
# 指定 Z3 位置
cmake -DZ3_ROOT=/path/to/z3 ..
# 或使用 CMAKE_PREFIX_PATH
cmake -DCMAKE_PREFIX_PATH="/path/to/boost;/path/to/z3" ..
编译错误
问题:编译期间遇到错误。
解决方案:
bash
# 获取详细编译输出
cmake -DCMAKE_VERBOSE_MAKEFILE=ON ..
make
# 尝试使用不同的编译器版本
cmake -DCMAKE_CXX_COMPILER=g++-11 ..
# 禁用严格模式
cmake -DCMAKE_CXX_FLAGS="-Wno-error" ..
构建资源不足
问题:构建时内存不足或 CPU 使用率过高。
解决方案:
bash
# 减少并行构建任务数量
make -j2
# 使用较低的优化级别
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_CXX_FLAGS="-O1" ..
# 分阶段构建
cmake -DTESTS=OFF ..
make
cmake -DTESTS=ON ..
make test
Z3 求解器问题
问题:与 Z3 相关的构建或链接问题。
解决方案:
bash
# 禁用 Z3
cmake -DUSE_Z3=OFF ..
# 尝试动态加载 Z3
cmake -DUSE_Z3_DLOPEN=ON ..
# 禁用严格版本检查
cmake -DSTRICT_Z3_VERSION=OFF ..
# 如果存在旧版 Z3
cmake -DOLD_Z3_LIBRARIES=ON ..
可执行文件过大
问题:生成的 solc
可执行文件太大。
解决方案:
bash
# 构建时启用最小尺寸选项
cmake -DCMAKE_BUILD_TYPE=MinSizeRel ..
# 移除调试信息
strip solc/solc
# 禁用一些可选功能
cmake -DUSE_Z3=OFF -DLLL=OFF ..
跨平台构建问题
问题:在某个平台上构建但在另一个平台上使用时出现问题。
解决方案:
bash
# 创建静态链接的二进制文件
cmake -DSOLC_LINK_STATIC=ON -DBoost_USE_STATIC_LIBS=ON ..
# 指定最小目标平台(macOS)
cmake -DCMAKE_OSX_DEPLOYMENT_TARGET=10.15 ..
# 禁用特定于平台的功能
cmake -DUSE_Z3=OFF ..
完整示例:CMake 构建配置文件
以下是一个自定义 CMake 配置文件示例,可用于创建针对特定情况优化的构建:
cmake
# solidity_build_config.cmake
# 使用方法: cmake -C /path/to/solidity_build_config.cmake ..
# 基本构建设置
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "")
set(CMAKE_VERBOSE_MAKEFILE OFF CACHE BOOL "")
set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE BOOL "")
# 编译器和优化设置
set(CMAKE_CXX_FLAGS "-O3 -march=native -pipe" CACHE STRING "")
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ON CACHE BOOL "")
set(CMAKE_CXX_COMPILER_LAUNCHER "ccache" CACHE STRING "")
# Solidity 特定选项
set(SOLC_LINK_STATIC ON CACHE BOOL "")
set(USE_Z3 ON CACHE BOOL "")
set(USE_CVC4 OFF CACHE BOOL "")
set(TESTS ON CACHE BOOL "")
set(TOOLS ON CACHE BOOL "")
set(LLL OFF CACHE BOOL "")
# 依赖设置
set(Boost_USE_STATIC_LIBS ON CACHE BOOL "")
set(USE_CCACHE ON CACHE BOOL "")
# 安装设置
set(CMAKE_INSTALL_PREFIX "/opt/solidity" CACHE PATH "")
使用此配置文件:
bash
cmake -C /path/to/solidity_build_config.cmake ..
自动化构建脚本
以下是一个完整的脚本,用于自动化 Solidity 编译器的构建,并支持多种构建配置:
bash
#!/bin/bash
# build_solidity.sh - 自动化 Solidity 构建脚本
# 默认值
BUILD_TYPE="Release"
CORES=$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 2)
STATIC_LINK=true
TESTS=true
USE_Z3=true
INSTALL=false
PREFIX="/usr/local"
SOURCE_DIR=$(pwd)
BUILD_DIR="${SOURCE_DIR}/build"
VERBOSE=false
# 显示帮助
show_help() {
echo "Solidity 编译器构建脚本"
echo "用法: $0 [选项]"
echo
echo "选项:"
echo " -h, --help 显示帮助信息"
echo " -t, --type TYPE 构建类型: Debug, Release, RelWithDebInfo, MinSizeRel"
echo " 默认: $BUILD_TYPE"
echo " -j, --jobs N 并行构建任务数量"
echo " 默认: $CORES"
echo " -d, --dynamic 构建动态链接的二进制文件"
echo " -s, --static 构建静态链接的二进制文件(默认)"
echo " --no-tests 不构建测试"
echo " --no-z3 禁用 Z3 SMT 求解器"
echo " --install 构建后安装"
echo " --prefix PATH 安装前缀"
echo " 默认: $PREFIX"
echo " -b, --build-dir DIR 构建目录"
echo " 默认: $BUILD_DIR"
echo " -v, --verbose 显示详细输出"
echo
echo "示例:"
echo " $0 --type Debug --no-tests"
echo " $0 --static --jobs 4 --install --prefix ~/solidity"
}
# 解析参数
while [[ $# -gt 0 ]]; do
case "$1" in
-h|--help)
show_help
exit 0
;;
-t|--type)
BUILD_TYPE="$2"
shift 2
;;
-j|--jobs)
CORES="$2"
shift 2
;;
-d|--dynamic)
STATIC_LINK=false
shift
;;
-s|--static)
STATIC_LINK=true
shift
;;
--no-tests)
TESTS=false
shift
;;
--no-z3)
USE_Z3=false
shift
;;
--install)
INSTALL=true
shift
;;
--prefix)
PREFIX="$2"
shift 2
;;
-b|--build-dir)
BUILD_DIR="$2"
shift 2
;;
-v|--verbose)
VERBOSE=true
shift
;;
*)
echo "未知选项: $1"
show_help
exit 1
;;
esac
done
# 验证构建类型
if [[ ! "$BUILD_TYPE" =~ ^(Debug|Release|RelWithDebInfo|MinSizeRel)$ ]]; then
echo "错误: 无效的构建类型: $BUILD_TYPE"
echo "有效的构建类型: Debug, Release, RelWithDebInfo, MinSizeRel"
exit 1
fi
# 创建构建目录
mkdir -p "$BUILD_DIR"
cd "$BUILD_DIR"
# 构建 CMake 命令
CMAKE_ARGS=()
CMAKE_ARGS+=(-DCMAKE_BUILD_TYPE="$BUILD_TYPE")
CMAKE_ARGS+=(-DSOLC_LINK_STATIC=$([ "$STATIC_LINK" = true ] && echo "ON" || echo "OFF"))
CMAKE_ARGS+=(-DTESTS=$([ "$TESTS" = true ] && echo "ON" || echo "OFF"))
CMAKE_ARGS+=(-DUSE_Z3=$([ "$USE_Z3" = true ] && echo "ON" || echo "OFF"))
CMAKE_ARGS+=(-DCMAKE_INSTALL_PREFIX="$PREFIX")
CMAKE_ARGS+=(-DCMAKE_VERBOSE_MAKEFILE=$([ "$VERBOSE" = true ] && echo "ON" || echo "OFF"))
# 打印构建信息
echo "====== Solidity 构建配置 ======"
echo "构建类型: $BUILD_TYPE"
echo "静态链接: $STATIC_LINK"
echo "构建测试: $TESTS"
echo "使用 Z3: $USE_Z3"
echo "安装: $INSTALL"
echo "安装前缀: $PREFIX"
echo "构建目录: $BUILD_DIR"
echo "并行任务数: $CORES"
echo "================================"
# 运行 CMake 配置
echo "配置 CMake..."
cmake "${CMAKE_ARGS[@]}" "$SOURCE_DIR"
# 构建
echo "开始构建 Solidity..."
cmake --build . -- -j"$CORES"
# 运行测试
if [ "$TESTS" = true ]; then
echo "运行测试..."
ctest -j"$CORES"
fi
# 安装
if [ "$INSTALL" = true ]; then
echo "安装 Solidity 到 $PREFIX..."
cmake --install .
echo "安装完成。"
echo "solc 路径: $PREFIX/bin/solc"
fi
echo "构建完成!"
if [ "$INSTALL" = false ]; then
echo "编译器位于: $BUILD_DIR/solc/solc"
fi
使用示例:
bash
chmod +x build_solidity.sh
# 基本构建
./build_solidity.sh
# 调试构建,不含测试
./build_solidity.sh --type Debug --no-tests
# 静态链接构建并安装
./build_solidity.sh --static --install --prefix ~/solidity-custom
# 禁用 Z3,优化构建大小
./build_solidity.sh --no-z3 --type MinSizeRel
结论
CMake 为 Solidity 编译器的构建提供了强大而灵活的配置选项,使您能够根据特定需求定制构建过程。通过了解这些选项,您可以:
- 优化构建性能和结果质量
- 启用或禁用特定功能
- 定制编译器以满足特定环境要求
- 配置测试和分析工具
- 解决构建过程中可能遇到的问题
合理使用这些 CMake 选项可以简化开发工作流程,提高构建质量,并确保 Solidity 编译器适合您的特定用例。无论您是需要优化性能的开发者,还是需要调试功能的贡献者,了解这些 CMake 选项都是使用和开发 Solidity 的重要部分。