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),仅供参考

相关新闻

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/8/22 15:05:15 阅读更多 →
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/8/22 15:05:15 阅读更多 →
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/8/22 15:05:15 阅读更多 →

最新新闻

锤子助手第054个开关:显示红包详情的位置、验证方法与资金信息隐私边界

锤子助手第054个开关:显示红包详情的位置、验证方法与资金信息隐私边界

🔥 个人主页: 杨利杰YJlio ❄️ 个人专栏: 《Windows 疑难杂症与工单复盘案例库》 《Sysinternals实战教程》 《WINDOWS教程》 《Windows PowerShell 实战》 《IOS插件分析测试》 《超简单:用Python让Excel飞起来》…

2026/8/22 16:09:30 阅读更多 →
为什么PHP需要各种扩展?

为什么PHP需要各种扩展?

首先,我们要明白PHP是一种编程语言,它可以让我们告诉电脑去执行一些任务。但是,PHP本身并不包含所有可能的功能。就像我们玩游戏时,游戏本身可能只提供了基础的游戏玩法,如果我们想要更多的功能或者更好的体验&#xf…

2026/8/22 16:09:30 阅读更多 →
[AutoSar]BSW_Com020 Handle_ID,Global_PDU,Local_PDU的联系

[AutoSar]BSW_Com020 Handle_ID,Global_PDU,Local_PDU的联系

目录关键词平台说明一、概念二、API的使用和形参三、Handle ID 唯一性特例四、PDU和handle ID关联用例关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector , EB芯片厂商TI 英飞凌编程语言C,C编译器HighTec (GC…

2026/8/22 16:09:30 阅读更多 →
chrome-react-perf自定义Redux中间件深度剖析:如何向被测页面注入Perf.start()命令

chrome-react-perf自定义Redux中间件深度剖析:如何向被测页面注入Perf.start()命令

chrome-react-perf自定义Redux中间件深度剖析:如何向被测页面注入Perf.start()命令 【免费下载链接】chrome-react-perf An Operation Interface for react-addons-perf Package 项目地址: https://gitcode.com/gh_mirrors/ch/chrome-react-perf chrome-reac…

2026/8/22 16:09:29 阅读更多 →
Linux日志审计与故障追踪:从基础命令到高级工具实战指南

Linux日志审计与故障追踪:从基础命令到高级工具实战指南

在 Linux 服务器运维和开发过程中,你是否遇到过这样的场景:系统突然变慢,却不知道是哪个进程在“作祟”;服务莫名其妙崩溃,日志里只有一句含糊的错误信息;或者更糟,怀疑系统被入侵,却…

2026/8/22 16:09:29 阅读更多 →
Katapult刷固件翻车怎么办?10个常见问题排查与变砖恢复方法清单

Katapult刷固件翻车怎么办?10个常见问题排查与变砖恢复方法清单

Katapult刷固件翻车怎么办?10个常见问题排查与变砖恢复方法清单 【免费下载链接】katapult Configurable bootloader for Klipper 项目地址: https://gitcode.com/gh_mirrors/ka/katapult Katapult(前身 CanBoot)是一款专为 Klipper 3…

2026/8/22 16:08:29 阅读更多 →

日新闻

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

在电子硬件开发领域,PCB(印制电路板)的沉金工艺是提升产品可靠性和焊接质量的关键环节。对于需要高密度互连、长期稳定运行或高频信号传输的板卡,如“黍姐仿通行证”这类可能涉及身份识别、数据交互的硬件项目,选择正确…

2026/8/22 0:00:11 阅读更多 →
电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

这次我们来看一个针对电气考研电路科目的学习规划项目。它不是软件工具,而是一套聚焦于8月份关键节点的备考策略。对于电气工程考研的同学来说,电路分析是专业课的重中之重,也是拉开分差的关键。进入8月,复习进入强化阶段&#xf…

2026/8/22 0:00:11 阅读更多 →
消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

大家好,我是专注于前端开发与AI工具实践的技术博主。在日常使用 Claude Code 等AI编程助手时,你是否也遇到过这样的困扰:生成的代码功能上没问题,但代码风格、组件设计、交互逻辑总透着一股“AI味”——布局单调、样式简陋、交互生…

2026/8/22 0:00:11 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/21 3:21:33 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/22 8:09:09 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/21 6:07:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/21 16:42:28 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/22 7:31:03 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →