Agent Skillsaresbit/MateBot › ocaml-dune-migration

ocaml-dune-migration

GitHub

指导将 OCaml 项目从 ocamlbuild/topkg 迁移至 dune 构建系统,涵盖文件转换、依赖配置及 opam 更新。

skills/ocaml/ocaml-dune-migration/SKILL.md aresbit/MateBot

Trigger Scenarios

OCaml 项目构建系统迁移 处理 _tags 或 .mllib 文件 从 topkg 切换到 dune

Install

npx skills add aresbit/MateBot --skill ocaml-dune-migration -g -y
More Options

Non-standard path

npx skills add https://github.com/aresbit/MateBot/tree/master/skills/ocaml/ocaml-dune-migration -g -y

Use without installing

npx skills use aresbit/MateBot@ocaml-dune-migration

指定 Agent (Claude Code)

npx skills add aresbit/MateBot --skill ocaml-dune-migration -a claude-code -g -y

安装 repo 全部 skill

npx skills add aresbit/MateBot --all -g -y

预览 repo 内 skill

npx skills add aresbit/MateBot --list

SKILL.md

Frontmatter
{
    "name": "ocaml-dune-migration",
    "license": "ISC",
    "description": "Migrating OCaml projects from ocamlbuild\/topkg to dune. Use when discussing _tags files, .mllib files, pkg\/pkg.ml, topkg, or build system migration."
}

OCaml Build System Migration

When to Use This Skill

Invoke this skill when:

  • Converting a project from ocamlbuild to dune
  • Discussing _tags, .mllib, or pkg.ml files
  • Migrating from topkg to dune
  • Understanding ocamlbuild artifacts

Process Overview

1. Analyze the Existing Build

Read these files to understand the project:

  • _tags - ocamlbuild compilation flags and package dependencies
  • pkg/pkg.ml - topkg package description
  • pkg/META - findlib metadata
  • *.mllib files - module lists for libraries
  • opam - package dependencies

2. Create dune-project

(lang dune 3.20)
(name <package-name>)
(generate_opam_files true)

3. Create Library dune Files

For each library (from .mllib files):

(library
 (name <library_name>)
 (public_name <package.subname>)
 (libraries <dependencies>))

For optional libraries (from pkg/pkg.ml):

(library
 (name <library_name>)
 (public_name <package.subname>)
 (optional)
 (libraries <dependencies>))

4. Handle Toplevel Init Files

Files like *_top_init.ml shouldn't be compiled as modules:

(library
 (name lib_name)
 (modules lib_module)  ; Explicitly list modules
 (libraries deps))

(install
 (package pkg)
 (section lib)
 (files lib_top_init.ml))

5. Handle Warnings

If the original code triggers warnings:

(library
 (name lib)
 (flags (:standard -w -27)))

Common warnings to suppress in vendored code:

  • -w -27 - unused variable

6. Create Test dune File

(test
 (name test_name)
 (libraries lib_name alcotest))

For optional tests:

(executable
 (name test_optional)
 (modules test_optional)
 (optional)
 (libraries lib some_optional_lib))

7. Update opam File

  1. Rename opam to <package>.opam
  2. Remove ocamlbuild/topkg dependencies
  3. Add dune:
depends: [
  "ocaml" {>= "4.14.0"}
  "dune" {>= "3.0"}
]
  1. Update build commands:
build: [
  ["dune" "subst"] {dev}
  ["dune" "build" "-p" name "-j" jobs]
  ["dune" "runtest" "-p" name "-j" jobs] {with-test}
  ["dune" "build" "@doc" "-p" name "-j" jobs] {with-doc}
]

8. Documentation dune File

If there's a doc/ directory:

(documentation
 (package <package-name>))

9. Remove ocamlbuild Files

Files to delete:

  • _tags
  • .merlin
  • pkg/pkg.ml
  • pkg/META
  • *.mllib files
  • *.itarget files
  • The pkg/ directory

Mapping Reference

ocamlbuild dune
_tags: package(foo) (libraries foo)
_tags: thread (libraries threads)
foo.mllib with Foo (library (name foo) (modules foo))
pkg/pkg.ml: Pkg.mllib ~cond:x (library ... (optional))
pkg/META Auto-generated by dune
opam <package>.opam

Common Issues

"Library not found" for optional deps

Use (optional) on the library stanza.

Unused variable warnings

Add (flags (:standard -w -27)).

Module in wrong library

Use (modules ...) to explicitly list modules.

Toplevel init files

Exclude from library with (modules ...) and use (install ...).

Verification

After migration:

dune build @check    # Verify syntax
dune build           # Build project
dune runtest         # Run tests
dune build @doc      # Build docs

Version History

  • 2328a17 Current 2026-08-20 10:33

Same Skill Collection

matecode/SKILL.md
skills/3d-cad-skill/SKILL.md
skills/agent-browser/SKILL.md
skills/arkts-agent-skill/SKILL.md
skills/autoresearch-skill/SKILL.md
skills/baoyu-post-to-wechat/SKILL.md
skills/blogwatcher/SKILL.md
skills/c-skill/SKILL.md
skills/chrome-cdp/SKILL.md
skills/claudeception/.claude/skills/continuous-learning/SKILL.md
skills/claudeception/examples/nextjs-server-side-error-debugging/SKILL.md
skills/claudeception/examples/prisma-connection-pool-exhaustion/SKILL.md
skills/claudeception/examples/typescript-circular-dependency/SKILL.md
skills/claudeception/SKILL.md
skills/clawdhub/SKILL.md
skills/coding-agent/SKILL.md
skills/docx/SKILL.md
skills/ebook/book-architect/SKILL.md
skills/ebook/book-idea-validator/SKILL.md
skills/ebook/book-ideation/SKILL.md
skills/ebook/book-market-research/SKILL.md
skills/ebook/chapter-architect/SKILL.md
skills/elf-patcher/SKILL.md
skills/excalidraw-diagram-skill/SKILL.md
skills/frontend-slides/SKILL.md
skills/gemini/SKILL.md
skills/gifgrep/SKILL.md
skills/git-wt/SKILL.md
skills/github/SKILL.md
skills/harmonyos-code-review/SKILL.md
skills/harmonyos-linux-cli-dev/SKILL.md
skills/harmonyos-skills/skills/harmonyos-game-generator/SKILL.md
skills/harmonyos-skills/skills/harmonyos-test-cases/SKILL.md
skills/harmonyos-skills/skills/harmonyos-ui-automator/SKILL.md
skills/harmonyos-skills/skills/ohos-app-build-debug/SKILL.md
skills/hm-fetch-skill/SKILL.md
skills/hm-framework-skill/SKILL.md
skills/humanizer/SKILL.md
skills/ian-gemini-web/SKILL.md
skills/kernel-dev-skill/SKILL.md
skills/kimi/docx_SKILL.md
skills/kimi/pdf_SKILL.md
skills/kimi/SKILL.md
skills/kimi/webapp-building_SKILL.md
skills/lecture-skill/SKILL.md
skills/macos-menubar-tuist-app/SKILL.md
skills/macos2linuxapp/SKILL.md
skills/matecode/SKILL.md
skills/medialibrary-ut-generator/SKILL.md
skills/mermaid-validator/SKILL.md

Metadata

Files
0
Version
2328a17
Hash
14769c67
Indexed
2026-08-20 10:33

- 위키
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-25 07:32
浙ICP备14020137号-1 $방문자$