尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Erlang版本管理终极指南:用erlang.mk内置Kerl一条命令搞定所有OTP版本
Erlang版本管理终极指南用erlang.mk内置Kerl一条命令搞定所有OTP版本【免费下载链接】erlang.mkA build tool for Erlang that just works.项目地址: https://gitcode.com/gh_mirrors/er/erlang.mkerlang.mk 是一款 开箱即用 的 Erlang 构建工具其内置的 Kerl 集成让你可以一条命令管理所有 Erlang/OTP 版本自动下载、编译并安装指定的 OTP 版本让团队每一位成员的构建环境完全一致。本教程将带你快速掌握 OTP 版本锁定、多版本并存以及 CI 多版本测试的完整玩法告别 在我机器上能跑 的经典难题。为什么需要统一的 Erlang/OTP 版本管理写 Erlang 代码时几乎每个团队都会遇到这样的场景开发环境是 OTP 27生产环境是 OTP 25行为不一致新同事装错 OTP 版本依赖编译失败CI 只测一个版本上线才发现兼容性问题。erlang.mk 内置了 Kerl一个自动化构建 Erlang/OTP 的脚本的支持把 下载 → 编译 → 安装 → 切换到指定版本 全部收敛到make一条命令里。核心实现位于 core/kerl.mk官方说明文档在 doc/src/guide/kerl.asciidoc。一键锁定 OTP 版本ERLANG_OTP 配置方法这是最常用也最简单的一步在项目的 Makefile 中include erlang.mk之前设置ERLANG_OTP变量即可ERLANG_OTP OTP-20.0.4 include erlang.mk保存后再次运行makeerlang.mk 会自动拉取 Kerl 到临时目录_build/kerl用 Git tag 从 Erlang/OTP 官方仓库检出对应版本并完整编译安装到~/erlang/OTP-20.0.4并把该版本的bin目录注入PATH后续所有erlc、erl命令都走这个版本。整个过程只需等待编译完成无需手动下载源码、配置依赖或改环境变量。版本号怎么写erlang.mk 使用 Erlang/OTP 的 Git tag 作为版本标识。新版本形如OTP-20.0.4.4是补丁发布更老的版本则形如OTP_R16B03甚至出现过修复关键问题的OTP_R16B03-1。写 Makefile 前建议先确认官方发布列表。自动使用最新已安装 OTPLATEST_ERLANG_OTP如果不想锁死具体版本只想 用本机装好的最新 OTP可以设置LATEST_ERLANG_OTP。其实现逻辑在 core/kerl.mk 第 45-50 行对安装目录下的版本做排序和过滤排除master和OTP_R%旧命名自动选出最新的一个作为ERLANG_OTP。这在持续构建脚本中非常实用。CI 多版本测试一条命令跑遍所有 OTP开源库往往要兼容多个 OTP 版本。erlang.mk 的 CI 插件plugins/ci.mk基于同一套 Kerl 机制让你声明式地跑遍所有目标版本CI_OTP OTP-19.0.7 OTP-19.3.6.2 OTP-20.0.4然后执行make ci -kci目标会依次为每个版本构建 OTP若尚未构建、清理项目、注入对应PATH并运行测试-k参数保证某个版本失败时仍继续测试其余版本。此外还可以扩展目标ci-setup每个版本测试前的钩子例如ci-setup:: distclean可强制重新拉取依赖ci-extra每个版本测试后的钩子例如ci:: dialyze可在 CI 末尾运行 Dialyzer。更多细节见 doc/src/guide/ci.asciidoc。自定义 Kerl 配置安装目录、源码仓库与编译参数所有 Kerl 变量都可以通过在 Makefile 中导出变量来覆盖常用的有变量作用默认值KERL_INSTALL_DIROTP 版本安装根目录$(HOME)/erlangKERL_GITKerl 脚本仓库地址kerl 官方仓库OTP_GITErlang/OTP 源码仓库erlang/otp 官方仓库KERL_COMMITKerl 检出的分支或提交masterKERL_MAKEFLAGS传给 OTP 编译的 make 参数空例如把版本装到项目目录内注意必须写绝对路径erlang.mk 不会自动展开变量export KERL_INSTALL_DIR $(CURDIR)/erlang常见问题与注意事项构建慢是正常的首次make需要完整编译 Erlang/OTP耗时较长之后该版本已存在直接复用不会重复编译判断逻辑见 core/kerl.mk 第 61-65 行。与.ONESHELL不兼容有用户报告版本锁定功能与 GNU Make 的.ONESHELL特性存在兼容问题如遇到诡异报错可先检查这一点。多个版本可并存每个 OTP 版本安装为独立子目录如~/erlang/OTP-20.0.4不同项目可各自指向不同版本互不干扰。清理 Kerl 缓存make distclean会触发distclean-kerl目标移除临时拉取的 Kerl 目录。小结借助 erlang.mk 内置的 Kerl 集成你只需一个变量就能锁定 OTP 版本、一条命令就能完成多版本 CI 测试从 手动折腾环境 升级为 声明式版本管理。建议现在就在项目的 Makefile 中加上ERLANG_OTP试试——这也是 Erlang 项目团队协作的强烈推荐实践。【免费下载链接】erlang.mkA build tool for Erlang that just works.项目地址: https://gitcode.com/gh_mirrors/er/erlang.mk创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

OxCaml 寄存器分配器完全指南:IRC、linscan、greedy-inspired 三种策略对比实战

OxCaml 寄存器分配器完全指南:IRC、linscan、greedy-inspired 三种策略对比实战

OxCaml 寄存器分配器完全指南:IRC、linscan、greedy-inspired 三种策略对比实战 【免费下载链接】oxcaml OCaml - Oxidized! 项目地址: https://gitcode.com/gh_mirrors/fl/oxcaml 在 oxcaml(OCaml - Oxidized!) 新一代编译器的 CFG 后…

📅 2026/10/12 1:27:35
MentionEditText API参考清单:getMentionList、setPattern等8个核心方法完整详解

MentionEditText API参考清单:getMentionList、setPattern等8个核心方法完整详解

MentionEditText API参考清单:getMentionList、setPattern等8个核心方法完整详解 【免费下载链接】MentionEditText MentionEditText adds some useful features for mention string(xxxx), such as highlight, intelligent deletion, intelligent selection and i…

📅 2026/10/12 1:27:45
Normy快速上手:5分钟搞定React Query数据自动规范化与缓存自动更新

Normy快速上手:5分钟搞定React Query数据自动规范化与缓存自动更新

Normy快速上手:5分钟搞定React Query数据自动规范化与缓存自动更新 【免费下载链接】normy Automatic normalization and data updates for data fetching libraries (react-query, vue-query, trpc, swr, rtk-query and more) 项目地址: https://gitcode.com/gh_…

📅 2026/10/7 5:35:56
MORE NEWS

更多资讯

📰

AI日报自动化生成实战:从信息洪流到结构化认知的筛选与写作流程

1. 一份AI日报的诞生逻辑:从信息洪流到结构化认知每天早上八点,我的工作台上会同时亮着三块屏幕。左边是十几个信息源的RSS推送,中间是几个主流AI社区的热榜聚合,右边是一份空白的Markdown文档。这份文档就是当天要产出的AI日报雏…

📰

Ant Design Blazor Segmented 组件自定义渲染:用 ChildContent 打造富内容分段控制器

UI组件前端 【免费下载链接】ant-design-blazor 🌈A rich set of enterprise-class UI components based on Ant Design and Blazor. 项目地址: https://gitcode.com/gh_mirrors/an/ant-design-blazor 点击查看 免费下载 本指南以 Ant Design Blazor 文…

📰

LIEF PowerPC 反汇编 API 详解:Python 指令与操作数(Immediate / Register / Memory / PCRelative)

逆向工程开发工具 【免费下载链接】LIEF LIEF - Library to Instrument Executable Formats (C, Python, Rust) 项目地址: https://gitcode.com/gh_mirrors/li/LIEF 点击查看 免费下载 LIEF 在 Extended 版本中提供基于 LLVM 的反汇编能力,其中 lief.as…

📰

mlpack MeanSplitBallTree 完全指南:均值切分球树的构造、遍历与距离边界计算

人工智能机器学习深度学习 【免费下载链接】mlpack mlpack: a fast, header-only C machine learning library 项目地址: https://gitcode.com/gh_mirrors/ml/mlpack 点击查看 免费下载 MeanSplitBallTree 是 mlpack 中基于球(ball)边界的二…

📰

Claude Code Viewer 实战:用 TaoToken 统一 Key 打造 Web 端会话管理面板

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

CSS 闪烁效果(Blink)实战:用 You-need-to-know-css 示例彻底搞懂 animation-direction 四个取值

前端文档教程 【免费下载链接】You-need-to-know-css 💄CSS tricks for web developers~ 项目地址: https://gitcode.com/gh_mirrors/yo/You-need-to-know-css 点击查看 免费下载 本文围绕 You-need-to-know-css 仓库「动画过渡」章节中的闪烁效果文档&…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬