# EazyMake **Repository Path**: egglzh/EazyMake ## Basic Information - **Project Name**: EazyMake - **Description**: A simple C/C++ builder - **Primary Language**: C++ - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-26 - **Last Updated**: 2026-09-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # EazyMake 中文 · [English](README.md) **写 C++,但不需要写 CMake。** 简单的 C/C++ 构建工具 —— `ezmk`。支持 GCC、Clang 和 MSVC。 **设计理念:** 易用优先,功能从简。[复杂构建](docs/zh/complex-builds.md)请使用 CMake。 > **v1.1.0 起公共 API 永久稳定。** 破坏性变更仅在 `2.0.0` 引入,并提前至少一个次版本发出弃用警告。详见 [CHANGES.md](CHANGES.md#api-stability)。 ## 目录 - [快速开始](#快速开始) - [安装](#安装) - [命令速览](#命令速览) - [高级特性](#高级特性) - [文档](#文档) ## 为什么选择 EazyMake - **零配置** —— `ezmk project new my_app && cd my_app && ezmk build` 就能跑 - **内置包管理器** —— `ezmk pkg install fmt` 自动下载、编译、链接 - **跨编译器** —— 同一份 `ezmk.toml` 在 GCC、Clang、MSVC 下都能用 - **可扩展** —— Lua 脚本自定义构建逻辑和工具 ## 快速开始 ### 第一个项目 ```bash ezmk project new hello cd hello ezmk build # 编译 + 链接 ezmk run # 构建 + 运行 ``` > **从子目录也能构建(1.2.0+):** `ezmk build` / `ezmk test` 等命令会从当前目录 > 向上查找最多 5 层父目录中的 `ezmk.toml` —— 进入 `src/` 等子目录直接运行即可,如同 `git`。 ### 安装包 ```bash ezmk pkg install fmt # 按名称安装 — 官方仓库已预注册 ezmk pkg install ./mylib # 从源目录安装(1.2.0+,免打包) ``` ## 安装 **macOS / Linux —— 推荐(Homebrew):** ```bash brew tap 3667808244/eazymake && brew install ezmk ``` > Homebrew 覆盖 macOS(Apple Silicon)与 Linux x64。macOS Intel 暂无预编译产物 —— 请用下方的安装脚本。 **Arch Linux / MSYS2 —— pacman(1.2.0+):** ```bash # Arch Linux curl -fsSL https://raw.githubusercontent.com/3667808244/EazyMake/main/publish/arch/PKGBUILD -o PKGBUILD makepkg -si # MSYS2(MINGW64 环境) curl -fsSL https://raw.githubusercontent.com/3667808244/EazyMake/main/publish/arch/PKGBUILD -o PKGBUILD makepkg -si --nodeps ``` > 源码构建(静态链接),需 `base-devel`(Arch)或 MINGW64 工具链(MSYS2;`--nodeps` 跳过依赖检查)。暂未提交 AUR(账户注册未开放)—— 以仓库内 `publish/arch/PKGBUILD` 自取 + `makepkg -si` 为主。 **备选 —— 安装脚本:** **Linux / macOS / MSYS2:** ```bash curl -fsSL https://raw.githubusercontent.com/3667808244/EazyMake/main/install.sh | bash ``` **Windows(原生,无需 MSYS2):** ```powershell irm https://raw.githubusercontent.com/3667808244/EazyMake/main/install.ps1 | iex ``` 可通过 `PREFIX`、`EZMK_REF`、`EZMK_NO_DEFAULT_REPO` 自定义。详见[安装选项](#安装选项)。 ### 安装选项 | 变量 / 参数 | 作用 | 默认值 | |-------------|------|--------| | `PREFIX` | 安装前缀(二进制 → `$PREFIX/bin`) | `$HOME/.local` | | `EZMK_REF` | 要构建的 git tag/分支/提交 | 默认分支 | | `EZMK_NO_DEFAULT_REPO` | 设为 `1` 跳过官方仓库预注册 | (注册) | | `-Version`(PS) | 要安装的版本标签 | `"latest"` | | `-InstallDir`(PS) | 安装根目录 | `$env:LOCALAPPDATA\ezmk` | | `-DryRun`(PS) | 预览操作,不做实际更改 | (关闭) | ## 与 CMake 对比 | EazyMake | CMake | |----------|-------| | `ezmk project new app && cd app && ezmk build` | `mkdir build && cd build && cmake .. && make` | | `ezmk pkg install fmt` | `find_package(fmt)` + 手动安装 | | 1 个 TOML 文件 | 1+ 个 `CMakeLists.txt` | | 自动检测编译器 | `-DCMAKE_CXX_COMPILER=...` | ## 配置 ```toml [project] name = "myapp" type = "executable" # executable | static | shared | utils version = "0.1.0" language = "C++17" [compile] flags = ["-Wall", "-Wextra", "-O2"] include_dirs = ["include"] [link] system_target = ["pthread"] [depends] lib = ["fmt", "zlib"] # 硬性依赖 want = ["sqlite3"] # 可选依赖 ``` 完整参考:[`docs/zh/config_file.md`](docs/zh/config_file.md) ## 命令速览 ```bash # 日常 ezmk build [flags] # 增量构建 ezmk run [flags] [-- args] # 构建并运行 ezmk clean # 清除缓存 ezmk watch [flags] # 监视文件自动重建 ezmk install [flags] # 安装构建产物到指定前缀 ezmk test [flags] # 运行项目测试 ezmk pack [flags] # 创建可分发的归档(完整形式:ezmk project pack;--format zip|tar.gz(1.3.5+)/ tgz(1.4.0-dev.5+)) # 项目 ezmk project new # 创建新项目 ezmk project cc [flags] # 为 clangd 生成 compile_commands.json ezmk project export [flags] # 从 ezmk.toml 生成 CMakeLists.txt / .vscode/ 调试三件套(vscode: 1.4.0-dev.1+) ezmk project import [flags] # 导入 CMake 项目为 ezmk.toml(实验性) # 包管理 ezmk pkg install # 安装包 ezmk pkg search # 搜索已注册仓库 ezmk pkg list # 列出已安装的包 ezmk pkg update [] # 更新到最新版本 # 仓库 ezmk repo add # 注册仓库 ezmk repo update # 刷新仓库索引 # 工具 ezmk utils cc # 生成 compile_commands.json(自 1.2.0 起弃用 → ezmk project cc) # 示例(1.2.3+) ezmk example list # 列出内置示例 ezmk example hello # 生成示例到 ./hello/ # 工作区(1.3.0+)——批量管理一组项目 ezmk workspace list # 列出工作区成员 ezmk workspace build [flags] # 拓扑构建全部成员(依赖层先构建、同层并行) ezmk workspace test [flags] # 运行成员测试 ezmk workspace watch [flags] # 监视全部成员,变更自动重建(1.4.0-dev.5+) ezmk workspace clean [flags] # 清理成员缓存 ezmk workspace scan [] # 采纳现有项目:创建/更新 ezmk-workspace.toml(1.4.0-dev.7+) # build/test/watch/clean 附 -w 重定向:ezmk build -w ≡ ezmk workspace build ``` 完整参考:[`docs/zh/cli.md`](docs/zh/cli.md) ## 高级特性 | 特性 | 一句话 | 链接 | |------|--------|------| | 语义化版本约束 | `[depends]` 中用 `fmt@1.2.3` / `^1.0` / `~1.2` / `>=1.0` 精确控制依赖版本 | [`docs/zh/config_file.md`](docs/zh/config_file.md) · 教程 [包 02](tutorial/zh/packages/02-version-lockfile.md) | | `ezmk.lock` 确定性构建 | 锁定依赖版本与内容哈希,`--locked` 下 CI 可复现构建 | [`docs/zh/config_file.md`](docs/zh/config_file.md) · 教程 [包 02](tutorial/zh/packages/02-version-lockfile.md) | | 多平台多工具链预编译共包 | 同一包携带 `win-x64-msvc143` / `linux-x64-gcc13-abi11` 等多份产物,按当前工具链自动选择 | [`docs/zh/package_authoring.md`](docs/zh/package_authoring.md) · 教程 [互操作 02](tutorial/zh/interop/02-precompiled-packages.md) | | 第三方 / 私有仓库 | `ezmk repo add ` 接入 git 仓库形式的第三方源 | [`docs/zh/repo.md`](docs/zh/repo.md) · 教程 [包 03](tutorial/zh/packages/03-third-party-repos.md) | | CMake 互操作 | `project export cmake` 导出 / `project import --from cmake` 导入(实验性) | [`docs/zh/cli.md`](docs/zh/cli.md) · 教程 [互操作 01](tutorial/zh/interop/01-import-cmake.md) | | compile_commands | `project cc` 为 clangd/IDE 生成 compile_commands.json | [`docs/zh/cli.md`](docs/zh/cli.md) · 教程 [开发 02](tutorial/zh/dev/02-utils.md) | | 工作区批量管理(1.3.0+) | `ezmk-workspace.toml` 声明成员集合;`workspace build/test/watch/clean`(watch: 1.4.0-dev.5+)拓扑排序 + 并行;成员间单向非循环依赖、静态库产物自动注入 | [`docs/zh/cli.md`](docs/zh/cli.md) · 教程 [开发 05](tutorial/zh/dev/05-workspace.md) | ## 文档 | 文档 | 内容 | |------|------| | [教程](tutorial/zh/) | 手把手上手教程 | | [CLI 参考](docs/zh/cli.md) | 命令行与环境变量完整参考 | | [配置文件](docs/zh/config_file.md) | `ezmk.toml` 完整格式说明 | | [包管理](docs/zh/pkg.md) | 包格式与生命周期 | | [仓库系统](docs/zh/repo.md) | 基于 git 的仓库系统 | | [Lua 插件](docs/zh/utils.md) | 插件系统与 API 参考 | | [FAQ / 故障排除](docs/zh/faq.md) | 常见问题与修复 | | [技术细节](docs/zh/technical.md) | 依赖、源码构建、编译器支持 | | [术语表](docs/zh/glossary.md) | 术语参考 | | [不会设计的功能](docs/zh/non-goals.md) | 刻意不做、也不会做的功能 | | [更新日志](CHANGES.md) | 版本历史 | ## 相关链接 - [从源码构建 & 测试](docs/zh/technical.md#构建-eazymake) - [MSVC 支持](docs/zh/technical.md#使用-msvc) - [zsh 补全](docs/zh/technical.md#shell-补全zsh) - [官方仓库](https://github.com/3667808244/ezmk-repo) — 包仓库 - [Gitee 镜像](https://gitee.com/egglzh/EazyMake) — 本体仓库国内镜像(自动同步 GitHub)