在之前的实验中,我们一直都是在 xmake.lua 的描述域中进行配置,这对于大部分项目而言,已经足够满足需求,但是对于一些更加复杂的项目,仅仅通过描述域的配置逻辑是不够用的。我们需要更加灵活复杂的配置逻辑,能够处理一切的用户定制化配置需求,这个时候就得在 xmake 的自定义脚本域中进行配置了。
关于什么是描述域,什么是自定义脚本域,我们在实验五《xmake 基础之配置语法简介》中,已经详细介绍过了,这里再来简单的复习下:
- 描述域:
set_xxx
、add_xxx
相关的配置接口所在的作用域。 - 脚本域:
on_xxx
、after_xxx
和before_xxx
接口函数内部的作用域
我们可以从下面的配置注释中,大概了解下。
-- 描述域
target("test")
set_kind("binary")
add_files("src/*.cpp") -- 描述域
on_load(function (target)
-- 脚本域
end)
after_build(function (target)
-- 脚本域
end)
在构建阶段执行特定脚本
xmake 的 target()
目标配置块中,我们可以设置一些自定义的脚本域,在 xmake 构建的各个阶段中处理一些用户的自定义逻辑。我们可以把它们理解为类似 C/C++ 中的 Hook (钩子)。相当于在 xmake 的整个构建中,注入一些自定义的 lua 脚本代码。
例如,我们可以在指定 target 目标程序编译前后执行一些自定义的脚本操作。在开始本实验前,我们先执行下面的命令创建一个新的空工程。
cd Code
xmake create script_test
然后进入 script_test 文件夹,开始编辑里面的 xmake.lua 文件,在构建的前后阶段加上自己的一些自定义脚本逻辑,例如。
target("test")
set_kind("binary")
add_files("src/*.cpp")
before_build(function (target)
print("start building %s", target:targetfile())
end)
after_build(function (target)
print("finish building %s", target:targetfile())
end)
上面的配置中,我们额外配置了 before_build
和 after_build
两个自定义的 lua 脚本域,用于在当