macOS 从源码构建仓颉(Cangjie)SDK 全流程指南:环境搭建、全组件编译、打包与验证

原创2026-10-13 13:25:571,606 阅读
文章标签:文档教程

macOS 从源码构建仓颉(Cangjie)SDK 全流程指南:环境搭建、全组件编译、打包与验证

本指南以 cangjie_build 仓库中的 macOS 原生构建文档 为骨架,完整讲解如何在 macOS 系统上从零搭建 Cangjie SDK 构建环境,依次编译编译器、调试器、运行时、标准库、STDX 扩展库与九大工具,最终打包并验证 SDK 产物。读完本文,你将掌握 macOS(x86_64 / aarch64)下仓颉 SDK 集成构建的完整命令链、关键环境变量语义,以及构建产物与当前系统版本强绑定的重要前提。

1 构建概述:macOS 原生 Cangjie SDK 集成构建

cangjie_build 是一个面向社区贡献者的「仓颉 SDK 集成构建指导书」仓库,按操作系统与目标平台维护了多份构建指南(Linux / macOS / Windows 交叉构建等),详见 README_zh.md。本文对应的 docs/macos.md 属于 macOS Native 构建 场景:在 macOS 14 Sonoma(其他版本可参考)上搭建构建环境,并集成构建包含全部组件的 mac Cangjie SDK。

与交叉构建文档(docs/macos_android.md、docs/macos_ios.md、docs/macos_ohos.md)不同,macOS 原生构建不需要额外的 Android NDK、Xcode 或 OHOS 工具链,仅依赖 Homebrew 生态下的通用构建工具,因此是 macOS 上入手仓颉 SDK 集成构建的最简路径。

1.1 构建流程全景

原文档给出了五阶段的构建流程全景图(Mermaid kanban 图):

kanban
  1.准备阶段
    A[准备环境]
    B[创建工作区]
  2.源码获取与核心编译阶段
    D[获取仓颉源码]
    E[编译仓颉编译器和调试器]
    F[编译仓颉运行时]
  3.库编译阶段
    G[编译仓颉标准库]
    H[编译STDX扩展库]
  4.工具集编译阶段
    I[编译cjpm工具]
    J[编译cjfmt工具]
    K[编译cjlint工具]
    L[编译cjcov工具]
    M[编译cjtrace-recover工具]
    N[编译hle工具]
    O[编译lspserver工具]
    P[编译cjprof工具]
    Q[编译cjcompat工具]
  5.打包和验证
    R[组织并打包文件]
    S[编译Hello,Cangjie程序]

整个流程可归纳为五步:

  1. 准备阶段:准备系统环境、安装构建依赖、创建工作区;
  2. 源码获取与核心编译阶段:克隆 4 个源码仓库,编译编译器(cjc)与调试器(cjdb)、运行时(runtime);
  3. 库编译阶段:编译标准库(stdlib)与 STDX 扩展库;
  4. 工具集编译阶段:依次编译 cjpm、cjfmt、cjlint、cjcov、cjtrace-recover、hle、LSPServer、cjprof、cjcompat 九个工具;
  5. 打包和验证:将全部产物组织为 SDK 压缩包,并编译 Hello, Cangjie 程序验证。

1.2 关键注意事项(构建前必读)

  • 芯片指令集:务必根据本机芯片架构(x86_64 或 aarch64)设置对应的环境变量,ARCH 与 SDK_NAME 必须保持一致;交叉文档 docs/macos_ios.md 中同样强调「mac x86_64 不能编出 mac aarch64 的运行时和库」,可见架构不匹配会导致运行时产物不可用。
  • 版本强绑定:构建出的 SDK 只能在对应系统上运行;若要在更低版本系统上运行,需要在低版本系统上构建(见 README_zh.md 总览说明),此时构建步骤和复杂度会显著提升。
  • 磁盘与内存:完整构建需要 ≥50GB 磁盘空间与 ≥8GB 内存(含交换空间)。
  • 工具版本替换:文档中所有 16.x、1.x、3.x 等占位版本号,必须替换为你实际安装的版本。

2 环境准备

2.1 系统要求

项目 要求
操作系统 以 macOS 14 Sonoma 为示例,其他版本可参考
磁盘空间 ≥50GB
内存 ≥8GB(物理内存 + 交换空间)
用户权限 普通用户 + sudo 权限
芯片指令集 x86_64 或 aarch64,务必据此设置环境变量

2.2 构建依赖工具与版本要求

在动手安装前,建议先阅读 docs/env.md 中的「构建依赖工具」表。其中 macOS 环境一节给出了每个仓颉组件与构建工具的对应关系(✅ 表示该组件依赖此工具):

依赖构建工具 cjc cjdb runtime std cjpm cjfmt cjlint cjcov cjtrace-recover lsp hle stdx java interop objc interop
python: >3.7 ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅
googletest: >=1.12 ✅ -- -- -- -- -- -- -- -- ✅ -- -- -- --
LLVM: >=16.0.0 且 <17 ✅ ✅ ✅ ✅ -- ✅ ✅ ✅ ✅ ✅ -- ✅ ✅ ✅
cmake: >=3.16.5 且 <4 ✅ ✅ ✅ ✅ -- ✅ ✅ ✅ ✅ ✅ -- ✅ -- --
ninja: >1.10 ✅ ✅ ✅ ✅ -- ✅ -- -- -- ✅ -- ✅ -- --
openssl: >3 -- -- -- ✅ -- -- -- -- -- -- -- ✅ -- --
swig: >4 -- ✅ -- -- -- -- -- -- -- -- -- -- -- --
jdk: >21 -- -- -- -- -- -- -- -- -- -- -- -- ✅ --
ant: >1.10 -- -- -- -- -- -- -- -- -- -- -- -- ✅ --
Xcode >=15 -- -- -- -- -- -- -- -- -- -- -- -- -- ✅

要点解读:

  • LLVM 版本与 Linux 不同:macOS 要求 LLVM >=16.0.0 且 <17(对应 Homebrew 的 llvm@16),而 Linux 原生构建(docs/linux.md)要求 LLVM >=15.0.4 且 <16。这与编译器 LLVM 后端所需的版本对齐,安装时不要跨平台照搬版本。
  • openssl 只服务两个组件:标准库(std)与 STDX 扩展库。这也是后续编译这两部分时都要传入 --target-lib=$OPENSSL_PATH 的原因。
  • googletest / swig 是少数组件的专属依赖:googletest 仅 cjc 与 lsp 需要,swig 仅 cjdb 需要。
  • java interop / objc interop 在本篇原生构建流程中并未编译(需要额外克隆 cangjie_multiplatform_interop,参见 docs/macos_ios.md),因此 jdk、ant、Xcode 对本文流程不是必需项。

2.3 安装 cmake(要求 >=3.17, <4)

macOS 下推荐从 CMake 官网 下载 dmg 或 tar.gz 包手动安装。

方式一:dmg 安装

下载后拖入 Applications,然后执行(/path/to/cmake 需替换为自定义安装目录):

# 下方命令二选一:
# 安装至 /usr/local/bin
sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install
# 自定义安装位置
sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install=/path/to/cmake

# 使用前将 cmake/bin 加入环境变量
PATH="/Applications/CMake.app/Contents/bin:$PATH"

方式二:tar.gz 安装

# 解压 tar 包(请先创建好目标目录)
tar -zxvf cmake-3.x.x-macos-universal.tar.gz /path/to/cmake
# 使用前将 cmake/bin 加入环境变量,或将配置写入 ~/.zshrc
export PATH="/path/to/cmake/bin:$PATH"

提示:本文依赖表(docs/env.md)中 cmake 的通用下限为 >=3.16.5,而 macOS 文档正文明确为 >=3.17, <4,按 >=3.17, <4 准备即可同时满足两者。

2.4 安装其余构建工具(Homebrew)

推荐使用 Homebrew(国内用户可参考阿里云镜像)安装其余依赖:

brew install python3 ninja llvm@16 openssl@3 bison googletest gnu-tar swig

各工具在本流程中的角色(结合 docs/env.md 组件×工具矩阵):

  • python3:所有组件构建脚本(build.py)的运行时;
  • ninja:C/C++ 侧 CMake 构建生成器;
  • llvm@16:编译器、调试器、运行时、标准库、STDX 及多数工具的 LLVM 依赖;
  • openssl@3:标准库与 STDX 链接 OpenSSL 3+;
  • bison:编译器与调试器语法解析生成所需;
  • googletest:cjc 与 lsp 组件的测试框架依赖;
  • gnu-tar:提供 gtar 命令,用于以 GNU tar 格式打包 SDK(见 6.1 节);
  • swig:cjdb 调试器构建所需的接口生成工具。

2.5 设置环境变量

第一组:架构与版本变量(构建前务必设置)

export ARCH=aarch64 # 或 x86_64
export CANGJIE_VERSION=1.0.0 # Cangjie SDK 版本
export STDX_VERSION=1 # Stdx 版本
export SDK_NAME=mac-aarch64 # 或 mac-x64
  • ARCH 决定运行时/库产物的平台目录名(如 darwin_release_${ARCH}、darwin_${ARCH}_cjnative),后续大量 cp 与路径拼接都依赖它;
  • SDK_NAME 决定最终压缩包命名(cangjie-sdk-${SDK_NAME}-${CANGJIE_VERSION}.tar.gz)。

第二组:工具链路径变量(请替换为实际安装的具体版本号)

export CELLAR_PATH=/path/to/Cellar
# 可使用 brew --cellar 命令查看
# 对于 arm 芯片,Cellar 通常位于:/opt/homebrew/Cellar
# 对于 intel 芯片,Cellar 通常位于:/usr/local/Cellar

# 如何找到版本号:
# 使用 `brew list --versions` 查看已安装的软件包及其版本号,例如:
# brew list --versions llvm@16
export PATH=$CELLAR_PATH/llvm@16/16.x/bin:$PATH
export OPENSSL_PATH=$CELLAR_PATH/openssl@3/3.x/lib
export LD_LIBRARY_PATH=$OPENSSL_PATH:$LD_LIBRARY_PATH
export DYLD_LIBRARY_PATH=$OPENSSL_PATH:$DYLD_LIBRARY_PATH

说明:

  • CELLAR_PATH 可通过 brew --cellar 获得;arm 芯片通常在 /opt/homebrew/Cellar,intel 芯片通常在 /usr/local/Cellar;
  • 将 llvm@16 的 bin 目录加入 PATH,保证 clang 等工具链命令可被直接找到;
  • OPENSSL_PATH 指向 openssl@3 的 lib 目录(如 /opt/homebrew/Cellar/openssl@3/3.x/lib),供标准库与 STDX 以 --target-lib 方式链接;
  • 与 Linux 不同,macOS 动态链接器遵循 DYLD_* 环境变量,因此这里除了 LD_LIBRARY_PATH 还设置了 DYLD_LIBRARY_PATH。

3 源码准备

3.1 创建工作区

/path/to/workspace 需替换为构建仓颉 SDK 的工作目录:

export WORKSPACE=/path/to/workspace
mkdir -p $WORKSPACE;
cd $WORKSPACE;

3.2 获取仓颉源码

git clone https://gitcode.com/Cangjie/cangjie_compiler.git -b main;
git clone https://gitcode.com/Cangjie/cangjie_runtime.git -b main;
git clone https://gitcode.com/Cangjie/cangjie_tools.git -b main;
git clone https://gitcode.com/Cangjie/cangjie_stdx.git -b main;

四个仓库的分工:

  • cangjie_compiler:编译器(cjc)、调试器(cjdb)、envsetup.sh 与最终 SDK 的组装目录(output/);
  • cangjie_runtime:含 runtime/(运行时)与 stdlib/(标准库)两个独立构建单元;
  • cangjie_tools:cjpm、cjfmt、cjlint、cjcov、cjtrace-recover、hyperlangExtension、cangjie-language-server、cjprof、cjcompat 九个子工程;
  • cangjie_stdx:STDX 扩展库,产物位于 target/darwin_${ARCH}_cjnative/。

4 核心组件编译

4.1 编译仓颉编译器和调试器(cjc + cjdb)

执行构建:

cd $WORKSPACE/cangjie_compiler;
python3 build.py clean;
python3 build.py build -t release -v ${CANGJIE_VERSION} --no-tests --build-cjdb;
python3 build.py install;

参数说明:

  • -t release:release 构建类型(对应 Linux 文档中的同类用法);
  • -v ${CANGJIE_VERSION}:传入 SDK 版本号(即前面设置的 1.0.0);
  • --no-tests:跳过测试执行,加快构建;
  • --build-cjdb:同时构建调试器 cjdb(cjdb 依赖 swig,参见 docs/env.md)。

验证安装:

source output/envsetup.sh;
cjc -v;

envsetup.sh 会把 cjc 及后续组件加入当前 shell 环境。注意该验证在当前终端会话中生效,后续所有编译步骤应在同一会话(或重新 source)中执行。

4.2 编译仓颉运行时

cd $WORKSPACE/cangjie_runtime/runtime;
python3 build.py clean;
python3 build.py build -t release -v ${CANGJIE_VERSION};
python3 build.py install;
cp -R output/common/darwin_release_${ARCH}/{lib,runtime} $WORKSPACE/cangjie_compiler/output;

关键点:

  • 运行时产物位于 output/common/darwin_release_${ARCH}/,目录名中的 ${ARCH} 即前面设置的环境变量,架构不匹配会直接导致后续标准库链接失败;
  • 最后一步把运行时的 lib 与 runtime 目录合并进编译器 output,这是 SDK 组装的关键动作——后续标准库编译和最终打包都以 cangjie_compiler/output 为汇聚点。

4.3 编译仓颉标准库

cd $WORKSPACE/cangjie_runtime/stdlib;
python3 build.py clean;
python3 build.py build -t release \
  --target-lib=$WORKSPACE/cangjie_runtime/runtime/output \
  --target-lib=$OPENSSL_PATH;
python3 build.py install;
cp -R output/* $WORKSPACE/cangjie_compiler/output/;

参数说明:

  • --target-lib 可多次传入:一次指向运行时构建输出(供标准库引用运行时符号),一次指向 $OPENSSL_PATH(标准库依赖 OpenSSL 3+,与 docs/env.md 矩阵中 std 对 openssl 的 ✅ 对应);
  • 完成后将标准库产物 output/* 全部合并进编译器 output。

4.4 编译 STDX 扩展库

cd $WORKSPACE/cangjie_stdx;
python3 build.py clean;
python3 build.py build -t release --target-lib=$OPENSSL_PATH --include=${WORKSPACE}/cangjie_compiler/include;
python3 build.py install;
export CANGJIE_STDX_PATH=$WORKSPACE/cangjie_stdx/target/darwin_${ARCH}_cjnative/static/stdx;

要点:

  • --target-lib=$OPENSSL_PATH:STDX 同样依赖 OpenSSL 3+;
  • --include=${WORKSPACE}/cangjie_compiler/include:引用编译器安装出的头文件(interop 相关接口定义);
  • 构建完成后导出 CANGJIE_STDX_PATH,指向 darwin_${ARCH}_cjnative 平台目录下的静态 stdx,供打包阶段使用。

5 编译仓颉工具集

所有工具统一被安装/拷贝到 cangjie_compiler/output/tools 下的 bin、lib、config 三个子目录,构成 SDK 的工具集部分。

5.1 cjpm(包管理器)

cd $WORKSPACE/cangjie_tools/cjpm/build;
python3 build.py clean;
python3 build.py build -t release --set-rpath @loader_path/../../runtime/lib/darwin_${ARCH}_cjnative;
python3 build.py install;
mkdir -p ${WORKSPACE}/cangjie_compiler/output/tools/config;
cp ${WORKSPACE}/cangjie_tools/cjpm/dist/cjpm   ${WORKSPACE}/cangjie_compiler/output/tools/bin;
mv ${WORKSPACE}/cangjie_tools/cjpm/dist/*.toml ${WORKSPACE}/cangjie_compiler/output/tools/config;
  • --set-rpath @loader_path/../../runtime/lib/darwin_${ARCH}_cjnative 是 macOS(Mach-O)特有的动态库查找路径:@loader_path 指向 cjpm 可执行文件自身所在目录(即 output/tools/bin),向上两级进入 output/runtime/lib/...,使 cjpm 在 SDK 内即可定位运行时动态库。对照 Linux 文档 docs/linux.md,Linux 侧对应写法是 \$ORIGIN/../../runtime/lib/linux_${ARCH}_cjnative,这是两种平台动态链接语义(@loader_path vs $ORIGIN)的差异;
  • .toml 配置文件被单独移入 tools/config,保持 bin 目录纯净。

5.2 cjfmt(代码格式化)

cd ${WORKSPACE}/cangjie_tools/cjfmt/build;
python3 build.py clean;
python3 build.py build -t release;
python3 build.py install;
mv ${WORKSPACE}/cangjie_tools/cjfmt/build/build/bin/cjfmt ${WORKSPACE}/cangjie_compiler/output/tools/bin;
mv ${WORKSPACE}/cangjie_tools/cjfmt/config/*.toml         ${WORKSPACE}/cangjie_compiler/output/tools/config;

注意 cjfmt 的可执行文件位置与其他工具不同(在 build/build/bin/ 下),需按其实际产物路径拷贝。

5.3 cjlint(静态检查)

cd ${WORKSPACE}/cangjie_tools/cjlint/build;
python3 build.py clean;
python3 build.py build -t release;
python3 build.py install;
mv ${WORKSPACE}/cangjie_tools/cjlint/dist/bin/cjlint ${WORKSPACE}/cangjie_compiler/output/tools/bin
mv ${WORKSPACE}/cangjie_tools/cjlint/dist/lib/*      ${WORKSPACE}/cangjie_compiler/output/tools/lib
mv ${WORKSPACE}/cangjie_tools/cjlint/dist/config/*   ${WORKSPACE}/cangjie_compiler/output/tools/config

cjlint 除可执行文件外还带 lib 与 config 两类附属产物,需一并迁移。

5.4 cjcov(覆盖率统计)

cd ${WORKSPACE}/cangjie_tools/cjcov/build;
python3 build.py clean;
python3 build.py build -t release;
python3 build.py install;
mv ${WORKSPACE}/cangjie_tools/cjcov/dist/cjcov ${WORKSPACE}/cangjie_compiler/output/tools/bin;

5.5 cjtrace-recover(崩溃栈恢复)

cd ${WORKSPACE}/cangjie_tools/cjtrace-recover/build;
python3 build.py clean;
python3 build.py build -t release;
python3 build.py install --prefix ${WORKSPACE}/cangjie_compiler/output/tools;

该工具直接通过 install --prefix 指定安装前缀为 output/tools,无需手动拷贝。

5.6 hle(HyperLangExtension)

cd $WORKSPACE/cangjie_tools/hyperlangExtension/build;
python3 build.py clean;
python3 build.py build -t release;
python3 build.py install;
cp ${WORKSPACE}/cangjie_tools/hyperlangExtension/target/bin/main  ${WORKSPACE}/cangjie_compiler/output/tools/bin/hle;
cp -R ${WORKSPACE}/cangjie_tools/hyperlangExtension/src/dtsparser ${WORKSPACE}/cangjie_compiler/output/tools;
rm -rf ${WORKSPACE}/cangjie_compiler/output/tools/dtsparser/*.cj;
  • 构建产物 main 被重命名为 hle 放入 tools/bin;
  • dtsparser 目录(含 .cj 源码文件)被整体拷入 tools,随后删除其中的 .cj 文件,仅保留解析器运行所需的非源码部分。

5.7 LSPServer(语言服务)

cd $WORKSPACE/cangjie_tools/cangjie-language-server/build;
python3 build.py clean;
python3 build.py build -t release;
python3 build.py install;
cp ${WORKSPACE}/cangjie_tools/cangjie-language-server/output/bin/LSPServer ${WORKSPACE}/cangjie_compiler/output/tools/bin

LSPServer 是语言服务器协议的实现,供编辑器/IDE 集成仓颉语言能力使用(该组件依赖 googletest,见 docs/env.md)。

5.8 cjprof(性能剖析)

cd ${WORKSPACE}/cangjie_tools/cjprof/build;
python3 build.py build -t release;
python3 build.py install;
cp $WORKSPACE/cangjie_tools/cjprof/dist/bin/cjprof ${WORKSPACE}/cangjie_compiler/output/tools/bin
cp $WORKSPACE/cangjie_tools/cjprof/dist/lib/* ${WORKSPACE}/cangjie_compiler/output/tools/lib;
if [[ -d "$WORKSPACE/cangjie_tools/cjprof/static" ]]; then
  cp -Rf $WORKSPACE/cangjie_tools/cjprof/static cangjie/tools/config;
fi

提示:最后一条 if 分支中的目标路径 cangjie/tools/config 是文档原始写法,为相对当前命令执行目录的路径;若你的 shell 当前目录不在 $WORKSPACE 下,建议将该行显式改为 ${WORKSPACE}/cangjie_compiler/output/tools/config,以与前面各工具的 config 归集目录保持一致。

5.9 cjcompat

cd ${WORKSPACE}/cangjie_tools/cjcompat/build;
python3 build.py build -t release;
python3 build.py install;
cp $WORKSPACE/cangjie_tools/cjcompat/dist/bin/cjcompat ${WORKSPACE}/cangjie_compiler/output/tools/bin

至此,九个工具(cjpm / cjfmt / cjlint / cjcov / cjtrace-recover / hle / LSPServer / cjprof / cjcompat)全部汇入 output/tools。

6 组织并打包 SDK 与 STDX

6.1 组织并打包 SDK

# 清空历史构建
mkdir -p $WORKSPACE/software;
rm -rf $WORKSPACE/software/*;
cd $WORKSPACE/software;

# 拷贝 cangjie 目录
cp -R $WORKSPACE/cangjie_compiler/output cangjie;
cp $WORKSPACE/cangjie_compiler/LICENSE cangjie;
cp $WORKSPACE/cangjie_compiler/Open_Source_Software_Notice.docx cangjie;

# 打包和设置权限
chmod -R 750 cangjie
gtar --format=gnu -zcvf cangjie-sdk-${SDK_NAME}-${CANGJIE_VERSION}.tar.gz cangjie;
chmod 550 cangjie-sdk-${SDK_NAME}-${CANGJIE_VERSION}.tar.gz;
  • 为何用 gtar 而非 tar:macOS 系统自带的 tar 是 BSD tar(bsdtar),对 --format=gnu 的支持与行为可能与 GNU tar 不一致;前面 Homebrew 安装的 gnu-tar 提供 gtar 命令,--format=gnu 用于生成 GNU tar 格式归档,保证产物在 Linux 等环境下的可解压兼容性。对照 docs/linux.md,Linux 原生构建直接使用系统 tar 即可。
  • 打包前先执行 chmod -R 750 统一目录权限,归档文件本身权限设为 550。

6.2 组织并打包 STDX

cd $WORKSPACE/software;
# 拷贝 stdx 目录
cp -r $WORKSPACE/cangjie_stdx/target/darwin_${ARCH}_cjnative ./;
cp $WORKSPACE/cangjie_stdx/LICENSE darwin_${ARCH}_cjnative;
cp $WORKSPACE/cangjie_stdx/Open_Source_Software_Notice.docx darwin_${ARCH}_cjnative;
chmod -R 750 darwin_${ARCH}_cjnative;
zip -qr cangjie-stdx-${SDK_NAME}-${CANGJIE_VERSION}.${STDX_VERSION}.zip darwin_${ARCH}_cjnative;
chmod 550 cangjie-stdx-${SDK_NAME}-${CANGJIE_VERSION}.${STDX_VERSION}.zip;

STDX 使用 zip 而非 tar 打包,产物文件名带 STDX_VERSION(例如 cangjie-stdx-mac-aarch64-1.0.0.1.zip)。

最终 $WORKSPACE/software 下将包含两个交付物:

  • cangjie-sdk-${SDK_NAME}-${CANGJIE_VERSION}.tar.gz
  • cangjie-stdx-${SDK_NAME}-${CANGJIE_VERSION}.${STDX_VERSION}.zip

7 验证:编译 Hello, Cangjie 程序

7.1 检查生成的文件

ls -lh $WORKSPACE/software
# 应包含:
# - cangjie-sdk-${SDK_NAME}-${CANGJIE_VERSION}.tar.gz
# - cangjie-stdx-${SDK_NAME}-${CANGJIE_VERSION}.${STDX_VERSION}.zip

7.2 编译运行验证

cd $WORKSPACE;
source $WORKSPACE/software/cangjie/envsetup.sh;
echo "main() { println(\"Hello, Cangjie\") }" > hello.cj
cjc hello.cj -o hello && ./hello
# 您将在控制台看到以下输出:
# Hello, Cangjie

流程说明:

  1. 进入 software/cangjie(即 cangjie_compiler/output 的拷贝),source 其中的 envsetup.sh,将 cjc 等命令加入当前 shell;
  2. 用 echo 生成一个最小 hello.cj 源文件(仓颉入口为 main(),使用 println 输出);
  3. cjc hello.cj -o hello 编译,&& ./hello 运行,控制台输出 Hello, Cangjie。

看到该输出即代表 SDK 构建成功、可正常交付使用。若此时配置好 CANGJIE_STDX_PATH,标准库之外的 STDX 扩展库也可被 cjpm 工程正常引用。

8 macOS 构建要点总结

  • 架构必须一致:ARCH、SDK_NAME 与所有 darwin_${ARCH}_* 产物路径强绑定,架构写错会在链接阶段报错;macOS 无法跨架构产出运行时与库(详见 docs/macos_ios.md 的同类说明)。
  • 版本必须替换:CANGJIE_VERSION=1.0.0、STDX_VERSION=1 是示例值,16.x、3.x 等工具版本需按 brew list --versions 实测值替换。
  • 平台差异点:LLVM 用 llvm@16(Linux 为 llvm-15);动态库查找路径用 @loader_path(Linux 为 $ORIGIN);同时设置 DYLD_LIBRARY_PATH;打包用 gtar --format=gnu(Linux 直接用 tar)。
  • 产物平台绑定:构建出的 SDK 只能在对应系统上运行,低版本系统需要在其上重新构建(README_zh.md)。

如需英文对照,可参考 doc_en/macos.md;构建依赖版本矩阵见 docs/env.md;若后续需要在 macOS 上做 Android / iOS / OHOS 交叉构建,可继续阅读 docs/macos_android.md、docs/macos_ios.md、docs/macos_ohos.md。

登录后查看全文
cangjie_build