目录
一、引言
二、正文
1.构建规则的概念
2.构建规则的定义方法
3.构建规则的使用
三、结语
写在前面
原创不易,每一篇文章都是花费大量的时间编写而成,个人认为都是干货满满!如果各位觉得对自己有帮助,请动动您发财的小手,关注本账号, 我将持续为大家带来优质内容!
所有内容首发都将在公众号【飞翔的SA】,也请大家移步公众号阅读,您的支持是我坚持的动力。
一、引言
细心的你一定早就发现了,在xmake创建的项目中,xmake.lua的开头都有这样一行配置
add_rules(“mode.debug”, “mode.release”)
如下图所示:

我们在介绍xmake.lua的内容时,之所以没有介绍 add_rules API, 不是因为它不重要忘记介绍了,而是想让大家聚焦到target域的配置中,刻意忽略了这个API。
在我的认知中,add_rules的使用,与xmake中一个重要的要素——构建规则(rule)相关联,是我们迈向xmake高级用法比较关键的一步。
本文将介绍xmake的构建规则的概念、定义和应用方法,下篇文章中将在实战中演示如何使用构建规则。
文中使用的软件及版本:vs2019,xmake3.0.6, 请预先安装!
二、正文
1.构建规则的概念
1) 构建规则(rule)
是一种可复用、可自定义的构建逻辑模板,本质是把编译 / 链接 / 预处理等重复性的构建步骤封装成独立的 “规则单元”,可以在多个构建目标(target)中直接复用,无需重复编写相同的构建逻辑。
2) 内置规则
从2.2.1版本开始,在xmake中,内置了一些构建规则,简化我们常用的一些描述。如我们常见的 mode.debug, mode.release, qt.widgetapp等。
mode.debug
为当前工程xmake.lua添加debug编译模式的配置规则
等价于
if is_mode("debug") then
set_symbols("debug") –输出调试符号
set_optimize("none") — 不对代码进行优化
end
mode.release
为当前工程xmake.lua添加release编译模式的配置规则
等价于
if is_mode("debug") then
set_symbols("hidden") –不输出调试符号
set_optimize("fastest") –最快运行速度的优化 -Ox -fp:fast
set_strip("all")–链接时,去除所有符号
end
qt.widgetapp
用于编译Qt Widgets(ui/moc)应用程序
等价于
if is_mode("debug") then
set_symbols("hidden") –不输出调试符号
set_optimize("fastest") –最快运行速度的优化 -Ox -fp:fast
set_strip("all")–链接时,去除所有符号
end
可以使用指令 ,查看所有的内置规则
xmake show -l rules
内置规则的详细描述可查看官方文档:https://xmake.io/zh/api/description/builtin-rules.html
2.构建规则的定义方法
1) 定义语法
- rule(“规则名称”)– 如 mode.debug
set_extensions(“.ext1”,”.ext2”,…) — 设置规则适配的源文件类型
on_build_file(
function (target, sourcefile, opt)
— 构建逻辑
end)
2)rule 中支持的API
|
API |
功能 |
|
on_load |
规则加载时执行 |
|
on_config |
配置完成后执行 |
|
before_build |
构建前执行 |
|
before_build_file/files |
构建文件前执行 |
|
on_build |
构建时执行(覆盖默认构建行为) |
|
on_build_file/files |
构建文件时执行 |
|
after_build |
构建后执行 |
|
on_clean |
清理时执行 |
|
on_package |
打包时执行 |
|
on_install |
安装时执行 |
|
on_buildcmd_file |
生成批处理命令 |
|
on_buildcmd_files |
生成批处理命令 |
|
add_deps |
添加依赖的 rule |
|
add_imports |
导入模块 |
API详情查询官方文档:https://xmake.io/zh/guide/project-configuration/custom-rule.html
3.构建规则的使用
xmake提供了两种方式来引用定义的构建规则。
方式一:add_rules()
通过add_rules,将自定义的规则应用的构建目标。
如之前的示例中,在target域外 add_rules(“mode.debug”, “mode.release”) 可以将规则应用到所有构建目标;
也可以在 target域内使用add_rules,此时构建规则只对本目标生效,例如:
target("test")
set_kind("binary")
add_rules("markdown") — 应用 markdown 规则
add_files("src/*.md") — 自动使用 markdown 规则处理
方式二:add_files()
通过add_files的rule参数,可以为特定的源文件指定应用的构建规则,如下所示:
- target("test")
set_kind("binary")
add_files("src/*.md", {rule = "markdown"}) — 为特定文件指定规则
注意:add_files 制定的构建规则优先级高于 add_rules
三、结语
本文介绍了 xmake 的一项高级用法 —— 构建规则(Rule),首先阐释了 rule 的基本概念,接着讲解了在 xmake.lua 中定义 Rule 的具体方法,最后详细说明在构建目标中应用 Rule 的两种实现方式。
在下一篇文章中,我们将通过自定义 Rule 的实操示例,帮助大家更直观地理解自定义 Rule 的使用方法与实际优势。
如需了解xmake的其他用法,请查看合集 《国产构建工具之王xmake》
如需了解正则表达式的知识和用法,请查看合集《正则表达式的妙用》
喜欢我就关注我吧,持续带来精彩内容!
网硕互联帮助中心



![打卡信奥刷题(2877)用C++实现信奥题 P5054 [COCI 2017/2018 #7] Dostavljač-网硕互联帮助中心](https://www.wsisp.com/helps/wp-content/uploads/2026/02/20260227052520-69a12ac0df0af-220x150.png)

评论前必须登录!
注册