虽然我们可以在 target 中通过 on_build_file
等自定义脚本来定制化处理编译逻辑,但是如果每个 target 都要配置相同的处理逻辑,或者要处理多个不同种类的逻辑,并且全在 target 中去定义实现它们,那么整个配置会非常臃肿并且难以维护。
因此,xmake 提供了一种模块化的方式,也就是通过 rule()
自定义规则,然后使用 add_rules()
接口实现对单个 target 目标同时配置生效多个不同的编译规则。这些规则可以复用、对多个 target 生效。
而之前我们在 target 中的那些自定义脚本阶段的配置接口,例如 on_build
等,都可以在 rule()
中定义和实现。其实 xmake 内部的 C/C++ 代码编译本身也是使用 rule("c++")
规则来实现的,只不过默认就已经对 C/C++ 代码生效了,而用户在 xmake.lua 中自己定义配置的规则,就需要手动添加 add_rules
到对应的 target 才能生效。
直接这么说,也许还不太能很清晰理解什么是自定义规则,我们先来改造下之前的配置文件 xmake.lua,通过定义 rule()
的方式,来实现相同的目的,例如。
rule("myrule")
before_build(function (target)
print("before_build")
end)
after_build(function (target)
print("after_build")