
开发工具构建工具CLI包管理器【免费下载链接】xmake A cross-platform build utility based on Lua项目地址https://gitcode.com/gh_mirrors/xm/xmake点击查看免费下载导读Xmake 是一个基于 Lua 编写的轻量级跨平台构建工具本项目仓库即为 Xmake 的完整源码核心 C 引擎、Lua 运行时与全量脚本均在core/与xmake/目录下。本文以官方 READMEREADME_zh.md为主体结合仓库源码与测试工程系统讲解 Xmake 的定位、安装方式、xmake.lua工程描述语法、命令行操作、内置包依赖管理、平台/工具链/语言支持范围以及 IDE 工程生成、分布式编译与远程编译等高级能力。读完本文你将能够独立完成一个跨平台 C/C 工程的创建、配置、构建、运行、调试与依赖集成并理解这些能力在 Xmake 源码中的实现脉络。Xmake 是什么五位一体的构建工具Xmake 的核心定位可以用官方 README 中的一句话概括Xmake Build backend Project Generator Package Manager [Remote|Distributed] Build Cache为了便于理解官方还给出了一个更直观的类比Xmake ≈ Make/Ninja CMake/Meson Vcpkg/Conan distcc ccache/sccache即 Xmake 同时具备以下能力构建后端像 Make/Ninja 一样直接编译项目支持多任务并行、增量编译与头文件依赖自动分析工程生成器像 CMake/Meson 一样生成 IDE 工程文件VS、Xcode、Makefile、CMakeLists、compile_commands 等包管理器内置依赖包管理系统可一站式集成 C/C 依赖库远程/分布式构建与缓存支持远程编译、分布式编译以及本地/远程编译缓存。从源码结构看Xmake 的 Lua 脚本核心入口位于 xmake/core/main.lua其任务调度基于内置协程调度器scheduler主流程依次完成工程根定位、全局配置加载、选项解析、任务分发默认任务为build这为上述所有能力提供了统一的命令入口。一个值得强调的设计特点是Xmake 本身没有任何运行时依赖因为它内置了 Lua 运行时。在仓库的 core/xmake.lua 中可以看到构建 Xmake 自身时会根据配置选择内置luajit或lua运行时option(runtime)默认lua并可选集成 lua-cjson、readline、curses 等模块。这意味着安装完成后目标机器上无需预装 Lua。安装 Xmake官方 README 提供了三种一键脚本安装方式# 使用 curl curl -fsSL https://xmake.io/shget.text | bash # 使用 wget wget https://xmake.io/shget.text -O - | bash # 使用 powershellWindows irm https://xmake.io/psget.text | iex其中 Linux/macOS 的安装脚本在仓库中对应 scripts/get.shWindows 对应 scripts/get.ps1。仓库同时提供了 msys 下的辅助脚本 scripts/msys/xmake.sh、scripts/msys/xmake.cmd以及 Debian 打包相关文件scripts/debian/ 目录和 RPM 打包规格scripts/rpmbuild/xmake.spec说明 Xmake 也支持通过发行版包管理器安装。如果不想使用脚本安装README 也建议参考官方在线文档中的安装章节了解源码编译等其他方式。简单的工程描述从三行代码开始Xmake 使用xmake.lua文件描述项目构建。相比 makefile / CMakeLists.txt其配置语法更加简洁直观一个最小可执行的工程只需要三行target(hello) set_kind(binary) add_files(src/*.cpp)其中target(hello)声明一个名为hello的构建目标set_kind(binary)指定目标类型为可执行程序其他类型如static、shared见下文工程类型add_files(src/*.cpp)添加源文件支持通配符递归匹配例如add_files(src/**.cpp)。这段描述会被 Xmake 的 Lua 沙箱解释执行。在仓库中目标的加载与执行位于 xmake/core/project/project.lua而沙箱模块xmake/core/sandbox/sandbox.lua为xmake.lua提供了受限的脚本执行环境保证工程描述脚本只能通过内置 API 访问构建相关能力。官方为新手准备的入门课程参见 xmake.io 课程页涵盖 c、c、csharp、rust、zig 等 20 种语言的工程模板正是xmake create命令的模板来源。命令行使用从创建到调试的完整工作流创建工程$ xmake create hello $ cd helloxmake create会根据模板在指定目录生成工程骨架。从源码 xmake/actions/create/main.lua 可以看到创建逻辑支持通过-l/--language指定语言、-t/--template指定模板、--list列出所有可用模板并会校验目标目录是否为空、xmake.lua是否已存在除非加-f强制随后从 xmake/templates/ 复制模板文件并替换内建变量。构建工程$ xmake默认执行的即是build任务见 xmake/core/main.lua 中的option.taskname() or build。首次运行会先自动执行配置config任务完成平台探测、工具链检测与依赖包安装之后再进行编译后续运行则利用增量编译与本地缓存快速跳过未变更部分。运行目标与调试# 运行目标程序 $ xmake run console # 以调试模式启动附着调试器 $ xmake run -d consolexmake run在 xmake/actions/run/main.lua 中实现运行前会检查目标是否已构建未构建则提示先执行xmake build并默认开启run.autobuild策略自动补建通过-d选项会进入调试器devel.debugger。该模块还处理了特殊平台的运行方式例如 wasm 目标在浏览器中通过emrun或 Python http.server 启动、wasi 目标通过wasmtime执行、Windows 目标在非 Windows 主机上通过wine运行——这些细节体现了 Xmake 的跨平台运行能力。运行测试$ xmake testxmake test的实现位于 xmake/actions/test/main.lua它会先构建被测目标再并发执行各目标通过add_tests()声明的测试用例支持pass_outputs/fail_outputs输出匹配、should_fail预期失败、超时控制等能力最后汇总输出通过率报告。仓库自带测试框架在 tests/ 目录入口为 tests/run.lua覆盖了 API、模块、动作、插件与多语言示例工程。配置平台与图形化菜单# 配置平台/架构/模式 $ xmake f -p [windows|linux|macosx|android|iphoneos ..] -a [x86|arm64 ..] -m [debug|release] $ xmake # 图形化菜单配置 $ xmake f --menuxmake f即config任务的实现在 xmake/actions/config/main.lua 中其配置项合并遵循明确的优先级顺序命令行选项 选项缓存 全局配置 选项默认值 检测结果 工程配置 配置缓存。同时它会智能判断是否需要重新检测如工程文件 mtime 变化、Xmake 版本更新、平台切换等场景从而避免无意义的重复检测。--menu则进入基于 curses 的图形化配置界面模块位于 xmake/modules/private/menuconf.lua 附近UI 组件见 xmake/modules/ui/在终端里即可交互式勾选配置项。构建速度与 Ninja 持平README 提供了以本仓库core目录即 Xmake 自身源码工程为测试对象的官方对比数据分别在 Termux8 核与 macOS8 核上以-j12多任务并行、-j1单任务两种模式测试构建系统Termux (8core/-j12)构建系统MacOS (8core/-j12)xmake24.890sxmake12.264sninja25.682sninja11.327scmake(genmake)5.416s28.473scmake(genmake)1.203s14.030scmake(genninja)4.458s24.842scmake(genninja)0.988s11.644s单任务-j1模式下Termux 上 xmake 为 1m57.707sninja 1m52.845smacOS 上 xmake 为 39.937sninja 38.995s。需要说明的是这些数字是官方 README 记录的特定环境测试结果实际表现会随硬件、工具链版本与工程规模变化但足以印证 README 中编译速度可以跟 Ninja 持平的定位。Xmake 的并行调度基于协程化任务图async.runjobs、xmake/modules/async/并支持头文件依赖自动分析实现增量编译。平台与工具链支持支持平台README 列出了 Xmake 覆盖的广泛平台包括桌面Windows (x86, x64, arm, arm64, arm64ec)、macOS (i386, x86_64, arm64)、Linux (i386, x86_64, arm, arm64, riscv, mips, 390x, sh4 ...)BSD 系FreeBSD、NetBSD、OpenBSD、DragonflyBSD移动/嵌入式Android、iOS、WatchOS、AppleTVOS、AppleXROS、Wasm (wasm32, wasm64)、Harmony其他Solaris、MSYS、MinGW、Cygwin、Haiku以及通过cross工具链支持任意交叉编译目标。这些平台的定义位于 xmake/platforms/如 xmake/platforms/linux/xmake.lua、xmake/platforms/windows/xmake.lua 等 18 个平台目录每个平台文件声明了该平台的工具链选择、架构与构建选项。支持工具链运行xmake show -l toolchains可以列出全部内置工具链README 中给出的输出包括节选xcode、msvc、clang-cl、clang、gcc、mingw、cuda、ndk、rust、swift、llvm、cross、nasm、yasm、gnu-rm、emcc、icc、ifx、muslcc、zigcc、cosmocc、hdk、ti-c2000、iararm、kotlin-native、ascendc等。对应实现位于仓库 xmake/toolchains/ 目录每个子目录对应一种工具链如 xmake/toolchains/gcc/xmake.lua、xmake/toolchains/msvc/xmake.lua、xmake/toolchains/cross/xmake.lua并支持按版本细分的工具链如 gcc-8 至 gcc-16、clang-12 至 clang-23。Xmake 还支持智能分析交叉工具链信息即通过扫描交叉编译器的版本输出自动推断其平台与架构能力。支持语言除 C/C 外Xmake 还支持 Objc/Objc、Swift、Assembly、Golang、Rust、Dlang、Fortran、Cuda、Zig、Vala、Pascal、Nim、Verilog、FASM、NASM、YASM、MASM32、Cppfront、Kotlin、C#、Ascend C 等语言并支持多语言混合编译。语言相关的工具链选择与编译规则分别位于 xmake/languages/如 xmake/languages/c/xmake.lua、xmake/languages/c/xmake.lua、xmake/languages/rust/xmake.lua与 xmake/rules/。仓库的测试工程 tests/projects/ 提供了上述每种语言的可运行示例c、c、cuda、dlang、go、rust、swift、zig、kotlin-native、fortran、pascal、nim、vala 等目录。包依赖管理内置包管理器声明依赖README 给出最简单的包依赖描述add_requires(tbox 1.6.*, zlib, libpng ~1.6)依赖声明支持语义版本表达式如1.6.*、~1.6、1.6.1版本解析基于仓库内置的语义版本库 core/src/xmake/semver/C 实现。在使用依赖前需要在目标中引用它target(test) set_kind(binary) add_files(src/*.c) add_packages(zlib, libpng)add_requires负责下载与编译依赖add_packages负责将已安装包的 include 目录、链接库、宏定义等自动注入目标。从源码 xmake/core/package/package.lua 可以看出包名支持namespace::name形式vcpkg::ffmpeg中的vcpkg被识别为包管理器前缀而普通命名空间前缀如myns::zlib会被拆分保存。架构与流程Xmake 的包管理采用官方仓库 第三方包管理器适配的架构官方自建仓库 xmake-repo提供近 800 常用包README 原文数据全平台一键下载集成编译第三方包管理器适配Conan、Conda、Vcpkg、Homebrew/Linuxbrew、Pacman、Apt、Clib、Dub、Portage、Nimble、Cargo、NuGet 等。这些第三方管理器的适配实现就在仓库 xmake/modules/package/manager/ 目录下每种管理器一个子目录apt/、brew/、cargo/、conan/、conda/、dub/、nimble/、nuget/、pacman/、portage/、vcpkg/、clib/、pkgconfig/、cmake/、system/、xmake/等并可通过install_package.lua统一调度安装。包管理特性官方仓库提供近 800 常用包全平台一键下载集成编译全平台包支持支持交叉编译的依赖包集成支持包虚拟环境管理和加载xrepo env shell可一键进入包含全部依赖环境的 shellWindows 云端预编译包加速支持自建包仓库、私有仓库部署第三方包仓库支持vcpkg、conan、conda 等提供更丰富的包源支持自动拉取使用云端工具链支持包依赖锁定对应仓库中的*.lock文件。官方包管理器为独立的Xrepo命令行工具仓库中的 xmake/scripts/xrepo/ 与 scripts/xrepo.sh、scripts/xrepo.bat 提供了相关脚本支持xrepo可脱离构建工程独立安装/管理依赖包。更丰富的工程示例README 提供了大量开箱即用的工程描述示例以下逐一呈现并补充说明。Debug 和 Release 模式add_rules(mode.debug, mode.release) target(console) set_kind(binary) add_files(src/*.c) if is_mode(debug) then add_defines(DEBUG) end endadd_rules(mode.debug, mode.release)注册构建模式规则之后通过xmake f -m debug或-m release切换默认模式为release见 xmake/actions/config/main.lua 中的_find_default_modeis_mode(debug)则可在描述脚本中按模式做条件配置。模式规则的实现见 xmake/rules/mode/。自定义脚本target(test) set_kind(binary) add_files(src/*.c) after_build(function (target) print(hello: %s, target:name()) os.exec(echo %s, target:targetfile()) end)Xmake 为每个阶段都提供了钩子before_build/after_build、before_run/after_run、on_install等在 xmake/actions/run/main.lua 与 xmake/actions/test/main.lua 的脚本执行链中可以看到目标的执行依次调用run_before、规则钩子、run、规则run_after、run_after五段脚本自定义脚本能力正是建立在这样统一的脚本管线之上。依赖包自动集成add_requires(tbox 1.6.1, libuv master, vcpkg::ffmpeg, brew::pcre2/libpcre2-8) add_requires(conan::openssl/1.1.1g, {alias openssl, optional true, debug true}) target(test) set_kind(binary) add_files(src/*.c) add_packages(tbox, libuv, vcpkg::ffmpeg, brew::pcre2/libpcre2-8, openssl) end此例展示了在同一工程中混用官方仓库包tbox、libuv、vcpkg 包、brew 包与 conan 包并通过alias为conan::openssl起别名openssl后在add_packages中直接引用optional true表示该包可选缺失时不阻断构建debug true表示同时安装 debug 变体。另可使用xrepo命令独立安装依赖包。Qt QuickApp 应用程序target(test) add_rules(qt.quickapp) add_files(src/*.cpp) add_files(src/qml.qrc) end通过 Qt 规则族xmake/rules/qt/可以一键构建 Qt Widgets / QuickApp 应用仓库测试工程 tests/projects/qt/ 提供了完整示例。Cuda 程序target(test) set_kind(binary) add_files(src/*.cu) add_cugencodes(native) add_cugencodes(compute_75) endadd_cugencodes指定 CUDA 架构的 gencode 选项实现按 GPU 架构定制编译Cuda 语言支持见 xmake/languages/cuda/ 与 xmake/rules/cuda/。WDK/UMDF 驱动程序target(echo) add_rules(wdk.driver, wdk.env.umdf) add_files(driver/*.c) add_files(driver/*.inx) add_includedirs(exe) target(app) add_rules(wdk.binary, wdk.env.umdf) add_files(exe/*.cpp)WDK 驱动规则位于 xmake/rules/wdk/支持 UMDF/KMDF/WDM 多种驱动类型。iOS/MacOS 应用程序target(test) add_rules(xcode.application) add_files(src/*.m, src/**.storyboard, src/*.xcassets) add_files(src/Info.plist)Framework 和 Bundle 程序iOS/MacOStarget(test) add_rules(xcode.framework) -- 或者 xcode.bundle add_files(src/*.m) add_files(src/Info.plist)Apple 平台的应用/框架/扩展规则集中在 xmake/rules/xcode/仓库示例见 tests/projects/objc/。OpenMP 程序add_requires(libomp, {optional true}) target(loop) set_kind(binary) add_files(src/*.cpp) add_rules(c.openmp) add_packages(libomp) endZig 程序target(test) set_kind(binary) add_files(src/main.zig)自动拉取远程工具链Xmake 可以把工具链本身也当作依赖包来安装使用-- 拉取指定版本 llvm使用其中 clang 编译 add_requires(llvm 10.x, {alias llvm-10}) target(test) set_kind(binary) add_files(src/*.c) set_toolchains(llvmllvm-10) -- 拉取 muslcc 交叉编译工具链 add_requires(muslcc) target(test) set_kind(binary) add_files(src/*.c) set_toolchains(muslcc) -- 用 muslcc 工具链编译并集成所有依赖包 add_requires(muslcc) add_requires(zlib, libogg, {system false}) set_toolchains(muslcc) target(test) set_kind(binary) add_files(src/*.c) add_packages(zlib, libogg)set_toolchains(muslcc)中的前缀表示该工具链来自远程包{system false}表示强制从源码编译而不使用系统库。工具链的查找、切换与保存逻辑位于 xmake/core/tool/toolchain.lua。插件工程生成与脚本扩展生成 IDE 工程文件$ xmake project -k vsxmake -m debug,release # 新版 vs 工程生成插件推荐 $ xmake project -k vs -m debug,release $ xmake project -k cmake $ xmake project -k ninja $ xmake project -k compile_commandsxmake project插件的实现在 xmake/plugins/project/main.lua其makers()注册表支持make/makefile/xmakefile、cmake/cmakelists、xcode、ninja、vs2002至vs2026各版本、新版vsxmake含 vsxmake2010 至 vsxmake2026、compile_flags与compile_commands等生成器对应实现目录为 xmake/plugins/project/vsxmake/、xmake/plugins/project/cmake/、xmake/plugins/project/make/、xmake/plugins/project/vstudio/ 等。生成 compile_commands 后可直接对接 clangd 等语言服务器。加载自定义 Lua 脚本插件$ xmake l ./test.lua $ xmake l -c print(hello xmake!) $ xmake l lib.detect.find_tool gcc $ xmake l print(hello xmake!) {1, 2, 3} { 1, 2, 3 }xmake llua 插件提供了 REPL 交互式执行能力也可以直接运行脚本文件、执行单行表达式甚至调用 Xmake 内置模块如lib.detect.find_tool进行工具探测。REPL 交互式执行是 README支持特性中明确列出的能力之一其实现与 xmake/plugins/lua/ 目录相关。分布式编译、编译缓存与远程编译分布式编译和缓存README 明确列出了分布式编译与缓存对应 Xmake 的xmake distcc/xmake ccache能力的成熟度清单跨平台支持支持 msvc、clang、gcc 和交叉编译工具链支持构建 android、ios、linux、win、macOS 程序除编译工具链外无任何其他依赖支持编译服务器负载均衡调度支持大文件实时压缩传输lz4几乎零配置成本无需共享文件系统更加方便和安全其中大文件实时压缩传输lz4在仓库中有直接实现证据构建 Xmake 自身时即集成了 lz4 模块见 core/xmake.lua 中的includes(src/lz4)源码位于 core/src/lz4/ 与 core/src/xmake/lz4/。分布式编译无需共享文件系统构建脚本与中间产物通过传输通道分发降低了部署门槛。远程编译Xmake 还支持远程编译能力在构建机器上执行但编译任务分发到远程编译服务器其实现位于 xmake/modules/private/service/remote_build/从 xmake/actions/config/main.lua、xmake/actions/run/main.lua 等动作入口都能看到remote_build_action的分发逻辑。工程类型一览README 列出的支持工程类型包括静态库、动态库、控制台程序、Cuda 程序、Qt 应用程序、WDK Windows 驱动、WinSDK 应用程序、MFC 应用程序、iOS/MacOS 应用程序支持 .metal、Framework 和 Bundle 程序、SWIG/Pybind11 模块Lua、python 等、Luarocks 模块、Protobuf 程序、Lex/yacc 程序、C20 模块、Linux 内核驱动模块、Keil MDK/C51 嵌入式程序、Verilog 仿真程序。这些能力由 xmake/rules/ 下的各规则族c/、csharp/、cuda/、qt/、wdk/、xcode/、protobuf/、lex_yacc/、module/ 等提供。IDE 与编辑器集成官方及社区为 Xmake 提供了丰富的编辑器/IDE 插件生态xmake-vscodeVSCode 插件xmake-sublimeSublime Text 插件xmake-ideaIntelliJ IDEA 插件xmake-zedZed 编辑器插件xmake.vim第三方 Vim 插件xmake-visualstudio第三方 Visual Studio 插件xmake-qtcreator第三方 Qt Creator 工程管理插件xmake-gradleJNI可在 Gradle 中集成编译 JNI 库插件应用后xmakeBuild任务会自动注入到assemble任务链中plugins { id org.tboox.gradle-xmake-plugin version 1.1.5 } android { externalNativeBuild { xmake { path jni/xmake.lua } } }应用后执行./gradlew app:assembleDebug即可看到xmakeConfigureForArm64、xmakeBuildForArm64等任务自动执行 JNI 库编译并集成产物。CI 集成在 GitHub Actions 上可通过官方github-action-setup-xmake实现跨平台安装集成uses: xmake-io/github-action-setup-xmakev1 with: xmake-version: latest结合xmake test等命令即可在 CI 中完成配置、构建与测试的一体化流水线仓库自身也通过持续集成验证各平台构建README 顶部展示了 Windows/Linux/macOS 的 workflow 状态徽章。结语从 README_zh.md 到本文的梳理可以看出Xmake 的核心竞争力在于一体化一个工具同时覆盖构建后端、工程生成器、包管理器、远程/分布式构建与缓存且通过 Lua 脚本提供了远比 Makefile/CMake 更低的入门门槛。配合本仓库源码核心引擎 core/src/xmake/、脚本体系 xmake/、测试工程 tests/projects/无论是日常 C/C 工程开发、跨平台与交叉编译还是复杂依赖集成与分布式构建场景都可以在统一的xmake.lua描述体系下高效完成。赞分享开发工具构建工具CLI包管理器【免费下载链接】xmake A cross-platform build utility based on Lua项目地址https://gitcode.com/gh_mirrors/xm/xmake点击查看免费下载相关推荐5分钟上手xmake轻量级C构建工具如何重新定义跨平台开发5分钟上手xmake轻量级C构建工具如何重新定义跨平台开发 xmake是一款基于Lua的跨平台构建工具它以简洁的配置语法和强大的跨平台支持为C开发开发工具构建工具CLI包管理器OpenHuman PR Manager Lite从已就绪分支直接收尾 PR 的轻量 Agent 工作流OpenHuman PR Manager Lite从已就绪分支直接收尾 PR 的轻量 Agent 工作流 OpenHuman 的 .claude/agents人工智能AI 应用本地部署AI Agent交互助手深度研究Pravega快速入门5分钟搭建实时数据处理环境Pravega快速入门5分钟搭建实时数据处理环境 Pravega是一个开源的分布式流处理平台专为处理大规模实时数据流设计具备高吞吐量和可扩展性能轻松应对上一篇CMake 策略 CMP0109find_program 的“可执行但不可读”文件权限判定变迁下一篇SciPy 官方开发路线图深度解读从分布式数组、性能优化到稀疏数组迁移创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考