仓颉 VSCode 插件编译构建实战指南:命令面板、终端、运行按钮与可视化配置全解析
开发工具代码编辑器调试器【免费下载链接】vscode_cangjie项目地址https://gitcode.com/Cangjie/vscode_cangjie点击查看免费下载本文以 vscode_cangjie 仓库中的《编译构建》文档docs/source_zh_cn/compilation_and_building.md为主体骨架深入讲解如何在 VSCode 中借助仓颉插件完成仓颉工程的编译、构建、测试、安装与三方库导入。读者将掌握命令面板、终端、运行按钮、锤子按钮四种编译入口的使用方式理解cjpm.toml与cjpm_build_args.json两个核心配置文件的含义并能在 UI 界面中可视化地维护编译参数与外部依赖。一、编译构建能力概览与前置条件VSCode 中可视化方式提供的仓颉编译构建能力全部依赖cjpm 工具。cjpm 要求所打开的仓颉工程模块内必须包含规范的cjpm.toml文件如果工程中没有该文件仍想执行编译构建则只能退回到终端使用cjc命令完成。围绕 cjpm插件在 VSCode 中提供了四种编译构建方式在命令面板执行编译相关命令F1 或 Ctrl Shift P 打开macOS 为 Command Shift P输入分类词Cangjie即可过滤出全部编译命令在终端面板直接执行 cjpm 命令单击.cj文件编辑区的运行按钮运行整个工程单击.cj文件编辑区的锤子按钮编译整个工程。从源码实现看这四类入口最终都汇聚到同一个命令注册中心插件的工具模块在 launch-tools.ts 中实例化CjpmBuildCollection与CjpmInstallCollection由这两个类统一注册cangjie.build.*、cangjie.test.*、cangjie.install.*等命令并映射到对应的 cjpm 命令行参数。命令的完整清单可以在根目录 package.json 的contributes.commands中查阅每个命令都声明了标题、分类与图标。二、方式一在命令面板执行编译构建命令按下 F1或 Ctrl Shift PmacOS 为 Command Shift P打开命令面板输入分类词Cangjie即可看到全部编译相关命令。命令的实际底层参数定义在 cjpm-build-collection.ts 的BuildArgsCollection枚举中。2.1 基础编译命令cjpm build 系列命令面板选项底层命令说明Cangjie: Parallelled Buildcjpm build执行默认并行编译Cangjie: Build With Verbosecjpm build -V编译并展示编译日志Cangjie: Build With Debugcjpm build -g生成带 debug 信息的目标文件供调试使用Cangjie: Build With Coveragecjpm build --coverage编译结果携带覆盖率信息Cangjie: Build With Aliascjpm build -o name指定输出可执行文件的名称Cangjie: Build With Incrementcjpm build -i增量编译Cangjie: Build With CustomizedOptioncjpm build --customized-option按条件透传cjpm.toml中的命令Cangjie: Build With TargetDircjpm build --target-dir dir在指定路径生成编译产物Cangjie: Build With Jobscjpm build -j n编译前自定义最大并发度Cangjie: Build With CodeCheckcjpm build --lint编译时进行 CodeCheck 静态代码检查Cangjie: Build With MultiParametercjpm build 多参数叠加多个编译参数Cangjie: Update Cjpm.tomlcjpm update更新 cjpm.lock 文件Cangjie: Clean Build Resultcjpm clean清除编译结果工程目录下的 build 目录Cangjie: Check Circular Dependenciescjpm check检测文件依赖Parallelled Build理解编译产物目录执行并行编译后工程文件夹下会生成target目录其下有一个release文件夹release文件夹内包含三个目录.build-logs目录存放编译日志bin目录存放可执行文件只有cjpm.toml的output-type为executable时才会生成与工程名同名的目录存放编译的中间产物。编译是否成功的信息会打印在 Output 面板上。Build With Alias指定输出名按下回车后会弹出一个输入栏需要为编译结果赋予一个新名字。该命令只对cjpm.toml的output-type为executable时有效。对应源码中通过输入框收集别名后拼接为cjpm build -o alias执行见 cjpm-build-collection.ts。Build With CustomizedOption条件透传使用该选项需要先在cjpm.toml中配置customized-option字段。随后在命令面板执行该命令回车后可以选择需要的参数参数可以多选选择完毕再次回车即可。若未在cjpm.toml中配置customized-option字段就执行该命令插件会提示开发者先配置该字段。实现层面插件调用Utility.getCustomizedOptions()读取profile.customized-option中的条件名去重后拼成cjpm build --cfg1 --cfg2 ...形式执行见 utils.ts 与 cjpm-build-collection.ts。Build With TargetDir指定产物输出路径执行后可以指定编译产物的输出路径若默认不做输入操作则采用cjpm.toml中target-dir字段的值作为路径。当输入的路径与cjpm.toml中的target-dir字段不一致时会弹出提示询问是否覆盖cjpm.toml中的target-dir字段选择 Yes 则把该字段覆盖为输入值。命令成功后会在指定路径下生成编译产物对应源码见 cjpm-build-collection.ts。Build With Jobs自定义最大并发度支持在编译前自定义最大并发度输入参数为任意数字取值范围为(0, CPU 核数 * 2]。当输入非数字时操作终止并提示“Invaild input! The input should be number.”当输入超出范围时默认采用 CPU 核数并弹出超出可选范围的告警。对应源码在 cjpm-build-collection.ts 的registerBuildOrTestJobs中先通过os.cpus().length获取 CPU 核数再对输入进行isNaN与范围双重校验。Build With CodeCheck静态代码检查执行编译时会对当前工程进行 CodeCheck 静态代码检查检查到【要求】级别的代码规范违规则编译失败检查到【建议】级别的违规仅告警编译正常完成。底层命令为cjpm build --lint并且终端执行该命令后会联动触发 cjlint 检查见 ternimal-helper.ts。Build With MultiParameter多参数叠加编译仓颉工程的编译可以叠加多个参数。搜索到Build With MultiParameter命令后会弹出多选界面见下图其中--target参数根据cjpm.toml的target字段决定是否显示未配置则隐藏--customized-option参数根据cjpm.toml的customized-option字段决定是否显示未配置则隐藏。勾选想叠加的参数后按回车或单击 OK 按钮也可单击界面中的向左箭头重新选择编译参数。叠加参数时若选择了cjpm build --outputname即-o需要输入一个别名字符串后回车执行若选择了cjpm build --targetname可以进一步选择一个想要交叉编译的平台若选择了cjpm build --customized-option可以选择透传参数。叠加命令的编译结果就是这些命令分别执行的总和。该交互由multiParamsBuild()实现选项按顺序经过「选择参数 → 输入别名 / 输入并发度 → 选择交叉编译平台 → 选择条件选项」的向导式多步流程见 multi-step-select.ts。Update Cjpm.toml 与配置管理命令在修改完cjpm.toml文件后需要执行Cangjie: Update Cjpm.tomlcjpm update来更新cjpm.lock文件如果是通过 UI 界面修改的cjpm.toml则无需手动执行。此外还有Cangjie: Clean Build Result清除 build 目录与Cangjie: Check Circular Dependencies检测文件依赖两个辅助命令。2.2 单元测试命令cjpm test 系列命令面板选项底层命令说明Cangjie: Execute Test Filecjpm test编译单元测试产物并执行对应测试用例直接打印测试结果Cangjie: Test With NoRuncjpm test --no-run只编译对应测试产物不执行Cangjie: Test With SkipBuildcjpm test --skip-build在测试产物已存在的前提下只执行对应测试产物Cangjie: Test With Jobscjpm test -j n测试前自定义最大并发度操作与Build With Jobs相同Cangjie: Test With MultiParametercjpm test 多参数多参数执行仓颉工程的单元测试Test With MultiParameter 详细流程选择该命令后首先可以指定包路径、模块或成员执行单元测试——注意只有打开了工作空间才显示成员选择选项对应cjpm.toml中存在workspace字段时才会出现Specify a test member见 multi-step-select.ts。选择Specify the test paths后可输入指定待测试的包路径不需要指定则直接按 Enter 键输入多个包路径并用空格分隔可实现多包并发单元测试选择Specify the test modules后可输入指定待测试的模块多个模块同样以空格分隔实现多模块单元测试选择Specify a test member后可输入指定待测试的成员。随后进入参数叠加界面若选择了--filtervalue参数则需要输入对应的过滤测试子集的表达式正则最终生成完整的cjpm test命令执行结果在 Output 面板输出。若在cjpm.toml中配置了target和customized-option可选参数会额外包含--targetname选择后需挑选平台与--customized-option选择后需挑选条件选项。整体流程由multiParamsTest()与specifyOneTest()等函数串联见 multi-step-select.ts。2.3 安装与卸载命令cjpm install / cjpm uninstall 系列安装命令的底层参数定义在 cjpm-install-collection.ts 的InstallArgsCollection枚举中命令面板选项底层命令说明Cangjie: Install With Verbosecjpm install -V展示安装日志Cangjie: Install With Debugcjpm install -g生成 debug 版本的安装产物Cangjie: Install With RootPathcjpm install --root dir指定可执行文件的安装路径Cangjie: Install With TargetDircjpm install --target-dir dir指定编译产物的存放路径安装前会先编译Cangjie: Install With Aliascjpm install --name name指定最终安装的产物名Cangjie: Install With Gitcjpm install --git url安装远端 git 代码仓产物Cangjie: Install With Listcjpm install --list打印已安装产物列表Cangjie: Install With SkipBuildcjpm install --skip-build跳过编译阶段直接安装产物需项目处于编译完成状态Cangjie: Install With Jobscjpm install -j n指定并行编译的最大并发数Cangjie: Install With CustomizedOptioncjpm install --cfg ...按条件透传cjpm.toml中的命令Cangjie: Install With SkipScriptcjpm install --skip-script跳过待安装模块构建脚本的编译运行Cangjie: Install With CustomParametercjpm install 自定义参数执行自定义的安装命令参数选项Cangjie: Uninstall Binarycjpm uninstall name卸载仓颉项目清除对应可执行文件和依赖文件Cangjie: Uninstall With Rootcjpm uninstall --root dir name指定卸载时搜索的目标路径要点说明Install With RootPath / Uninstall With Root不配置自定义路径时Linux 与 macOS 下默认为$HOME/.cjpmWindows 下默认为%USERPROFILE%/.cjpm与输入框的 placeholder 提示一致见 cjpm-install-collection.tsInstall With Alias实现上会先执行cjpm build -o name再执行cjpm install --name name保证先编译出指定名称的产物再安装见 cjpm-install-collection.tsInstall With Git输入远端 git url 后回车可进一步选择代码仓的branch / tag / commit信息也可以选择自定义输入 branch / tag / commit 号见 cjpm-install-collection.tsInstall With CustomParameter需要先在 VSCode 设置中配置Cangjie: Cjpm Install: Custom对应配置项Cangjie.CjpmInstall.Custom声明于 package.json。配置入口单击 VSCode 页面左下角齿轮图标选择设置或右键单击插件选择 Extension Settings在搜索栏输入Cangjie并选择侧边栏的 Cangjie Language Support在该页面的输入框Cangjie: Cjpm Install: Custom中填入cjpm install相关的命令选项如-V -g --name \value\之后执行Install With CustomParameter命令即可把输入框内容带入cjpm install实现见 cjpm-install-collection.tsInstall With CustomizedOption同样要求先在cjpm.toml中配置customized-option字段参数可多选。三、方式二在终端执行 cjpm 命令开发者可以直接在 VSCode 的终端面板使用 cjpm 编译构建命令对仓颉工程进行编译构建。初次使用需要重新启动 VSCode插件会在启动时通过Utility.configTerminalcjpmEnv()自动配置终端环境变量如 Linux/macOS 的CANGJIE_PATH、LD_LIBRARY_PATH与 Windows 的 PATH 等见 utils.ts随后即可在终端中直接执行cjpm操作。命令面板中的各类编译命令最终也是通过TerminalHelper.execCommand()在名为cangjie的终端中发送命令执行的——该终端会先sourceSDK 的envsetup.sh/envsetup.bat完成环境初始化见 ternimal-helper.ts。四、方式三单击运行按钮运行工程开发者可以单击.cj文件编辑区的运行按钮即编辑器标题栏上的运行图标来运行整个仓颉工程。若整个工程中配置的output-type为executable则会在终端面板打印运行结果否则只会显示编译的结果。从源码看运行按钮对应cangjie.run命令先自动保存当前文件然后读取package.output-type——为executable时执行cjpm run否则执行cjpm build见 cjpm-build-collection.ts。注意运行按钮执行的编译过程是结合当前的cjpm.toml和cjpm_build_args.json的配置进行的getCjpmRunCmd()会把cjpm_build_args.json中的 alias 转为--name、debug 转为-g其余构建参数以--build-args...形式透传给cjpm run见 cjpm-build-collection.ts。五、方式四单击锤子按钮编译工程开发者可以单击.cj文件编辑区的锤子按钮来编译整个仓颉工程对应cangjie.build命令。锤子按钮执行的编译过程与运行按钮一致同样是结合当前的cjpm.toml和cjpm_build_args.json的配置进行的。两者的区别在于若output-type为executable运行按钮在编译完成后再运行整个工程而锤子按钮只编译工程无后续运行动作见 cjpm-build-collection.ts。六、可视化配置编译构建参数Edit Configuration (UI)编译构建过程中需要配置工程目录下的两个文件cjpm.toml与.vscode/cjpm_build_args.json。有三种修改方式直接修改cjpm.toml和cjpm_build_args.json文件按 F1 或 Ctrl Shift PmacOS 为 Command Shift P打开命令面板执行Cangjie: Edit Configuration (UI)打开可视化编辑的 UI 界面单击.cj文件编辑区右上角的画笔按钮跳转到可视化编辑的 UI 界面。6.1 cjpm_build_args.json编译参数的复选框配置.vscode/cjpm_build_args.json存放的是构建参数位于工程.vscode目录下UI 界面通过复选框或输入框的形式确定编译要使用的参数修改后会同步写回cjpm_build_args.json。该文件在插件激活时由Utility.gencjpmBuildArgsJSON()自动生成默认字段及默认值定义于 constant-num.ts{ debug: false, verbose: false, coverage: false, increment: false, codeCheck: false, alias: , cross: , condition: , job: , features: }字段与 cjpm 参数的映射关系cjpmBuildReplace见 constant-num.ts为debug → -g、verbose → -V、coverage → --coverage、codeCheck → --lint、alias → -o、cross → --target、increment → -i、condition → --、job → -j、features → --enable-features。UI 前端页面 setting.html 中逐个渲染了这些复选框与输入框。6.2 cjpm.toml模块配置的可视化编辑对于工程中cjpm.toml文件的配置开发者在 UI 输入框中输入内容并将光标移至输入框外即可生效到cjpm.toml文件中。注意当仓颉工程中的cjpm.toml文件和参数配置界面同时在 VSCode 的编辑区显示时对cjpm.toml文件的修改不会同步到 UI 界面上。构建参数cross-compile-configuration在cross-compile-configuration下单击Add Configuration按钮添加选项在 key 和 compile-option 处填写对应内容单击对勾按钮或按回车键即可与cjpm.toml保持同步。删除某条配置则单击该条选项的叉号按钮。若添加配置时不填写第一个字段 key 就直接提交会出现必须填写第一个字段的提示且该场景下提交的内容不会同步到cjpm.tomlUI 界面目前不会直接删除该条配置刷新 UI 后会自动删除内容与cjpm.toml保持一致。package-configuration包级配置package-configuration的添加和修改方式与cross-compile-configuration一致。其中output-type字段为下拉框选项可选类型有executable、static、dynamic和null四种新添加配置的output-type初始化类型为null见 config-set-by-ui.ts开发者可按需选择。当选择为null时该字段同步到cjpm.toml后会删除该字段见 setting-provider.ts。customized-option条件编译选项customized-option的添加修改方式与cross-compile-configuration一致配置内容写入profile.customized-option见 setting-provider.ts。注意customized-option的条件不能设置内置条件例如When[os Linux]不能作为customized-option的条件即cfg1 : --cfg \osLinux\是不允许的只能添加开发者自定义条件。这一点与源码中的builtinConditions new Set([os, backend, debug, cjc-version])定义相互印证见 constant-num.ts。转义规则重要在 UI 界面配置cjpm.toml时只有customized-option参数中配置的--cfg路径里的需要转义其他符号不需要添加转义符。例如--cfg路径中包含时--cfgD:/projects/cang\jiepackage-configuration的 p1 配置compile-option中--link-options不需要转义只加引号即可--link-options-rpathxxx。直接在cjpm.toml中填写时符号都需要加转义符号。例如customized-option的--cfg路径中所有符号都需要转义--cfg\D:/projects/cang\\jie\package-configuration的 p1 配置compile-option时--link-options\-rpathxxx\。七、三方库便捷导入7.1 导入方式在仓颉工程中可以导入外部三方库并在cjpm.toml中配置。插件资源管理器视图栏中的CANGJIE LIBRARY栏提供了便捷的图形化导入入口。注意三方库便捷导入仅适用于当前打开的仓颉工程的主模块如果其他子模块需要便捷导入三方库可以单独以工程的方式打开使用。cjpm.toml中的相关字段说明dependencies当前仓颉模块依赖的项目包含构建所需其它模块的配置信息版本号和路径两个选项必须全部配置否则执行失败并报错。日常使用中优先使用此方式导入项目依赖dev-dependencies格式与dependencies一致用于指定仅在开发过程中使用的依赖项例如仅在测试中使用的依赖库作者应将下游用户不需要的依赖放在此字段中bin-dependencies非特殊需求场景下建议使用dependencies方式导入依赖。目前仓颉插件仅支持本地的bin-dependencies配置。bin-dependencies 的两种导入形式当前仓颉模块依赖已编译好的package有两种导入形式。以下述目录结构为例导入pro0模块的xoo、yoo包与pro1模块的zoo包test ├── pro0 │ ├── libpro0_xoo.so │ ├── xoo.cjo │ ├── libpro0_yoo.so │ └── yoo.cjo ├── pro1 │ ├── libpro1_zoo.so │ └── zoo.cjo ├── src │ └── main.cj └── cjpm.toml方式一通过package-option导入map 结构key 为包名value 为 .cjo 前端文件的路径[target] [target.x86_64-w64-mingw32] [target.x86_64-w64-mingw32.bin-dependencies] [target.x86_64-w64-mingw32.bin-dependencies.package-option] pro0_xoo ./test/pro0/xoo.cjo pro0_yoo ./test/pro0/yoo.cjo pro1_zoo ./test/pro1/zoo.cjopackage-option中pro0_xoo名称作为 key与libpro0_xoo.so相对应前端文件 .cjo 的路径作为 value。与 .cjo 对应的.a和.so需放置在相同路径下且对应的 .cjo 模块文件必须与模块名来源文件放在相同的文件夹下该文件夹下不能有任何其他文件或文件夹。方式二通过path-option导入字符串数组结构每个元素代表待导入的路径名称[target] [target.x86_64-w64-mingw32] [target.x86_64-w64-mingw32.bin-dependencies] path-option [./test/pro0, ./test/pro1]cjpm会自动导入该路径下所有符合规则的仓颉库包合规性是指库名称格式为模块名_包名库名称不满足该规则的包只能通过package-option导入。优先级如果同时通过package-option和path-option导入相同的包则package-option字段的优先级更高。ffi外部 C 库依赖ffi表示当前仓颉模块外部依赖 C 库配置了依赖该库所需的信息包含名称和路径字段。资源管理器的CANGJIE LIBRARY视图栏可以方便地添加这几类外部库工程初始化后单击分类栏的加号按钮添加对应的三方库单击三方库上的减号删除对应的库单击视图栏的编辑按钮打开三方库导入的可视化界面来导入或删除三方库。以上删除和添加操作均同步到工程的cjpm.toml文件中源码中通过RequiresActionController读取所选路径并回写 TOML见 require-action-controller.ts。7.2 导入限制与注意事项项目中需要链接动态库C 库和仓颉库时需自行设置LD_LIBRARY_PATH执行export LD_LIBRARY_PATHxxx:$LD_LIBRARY_PATH在cjpm.toml中修改内容不会直接影响 treeView 和 UI 界面需要单击 treeView 或 UI 界面进行手动更新在 treeView 的库分类处添加外部库时若此时库分类目录是关闭状态添加后需要打开目录才能查看UI 界面的字段暂不支持 hover 显示内容的功能UI 界面非开发者添加的外部库其路径与cjpm.toml保持一致开发者添加的库和 treeView 均显示绝对路径。八、总结仓颉 VSCode 插件把 cjpm 的编译、测试、安装、卸载能力以命令面板、终端、运行按钮、锤子按钮四种形态接入 IDE并用cjpm.tomlcjpm_build_args.json双配置文件配合 UI 可视化编辑器显著降低了编译构建参数与三方库依赖的管理成本。理解每个命令背后的底层 cjpm 参数见 cjpm-build-collection.ts 与 cjpm-install-collection.ts掌握customized-option、target、package-configuration、bin-dependencies等字段的配置与转义规则即可在 VSCode 中高效完成仓颉工程的完整构建链路。赞分享开发工具代码编辑器调试器【免费下载链接】vscode_cangjie项目地址https://gitcode.com/Cangjie/vscode_cangjie点击查看免费下载相关推荐duix.ai 实时对话数字人开源 SDK从集成到选型的完整指南duix.ai 实时对话数字人开源 SDK从集成到选型的完整指南 如果产品里需要一个能即时开口、表情自然的对话数字人但你不想把每一帧画面都交给云端去渲染该人工智能数字人本地部署语音cangjie-build-support基于 hvigor 扩展仓颉应用编译构建的插件实战指南cangjie build support基于 hvigor 扩展仓颉应用编译构建的插件实战指南 本指南以 cangjie_deveco_plugins 仓库开发工具IDE调试器代码质量大麦自动抢票双端 Web 移动端自动化抢票完整指南3步跑通大麦自动抢票双端 Web 移动端自动化抢票完整指南3步跑通 ticket purchase 是一个用 Python 写的大麦自动抢票工具网页端用 SeGUI 自动化RPA上一篇终极指南如何用zteOnu解锁中兴光猫工厂模式获取完整网络控制权限下一篇MCA Selector让Minecraft世界焕然一新的区块管理艺术创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考