云计算百科
云计算领域专业知识百科平台

10.国产构建工具之王xmake——构建规则rule

目录

一、引言

二、正文

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》

如需了解正则表达式的知识和用法,请查看合集《​​​​​​​正则表达式的妙用》

喜欢我就关注我吧,持续带来精彩内容!

赞(0)
未经允许不得转载:网硕互联帮助中心 » 10.国产构建工具之王xmake——构建规则rule
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!