在默认情况下,xmake 在编译多个目标程序时,会通过多任务并行编译来提升项目的整体编译效率,不过每个 target 目标程序实际的编译顺序是未定义的。
然而有时候,某些项目工程中的多个目标程序之间是有依赖关系的,如果不控制编译顺序,那么有可能会错误地优先编译一些需要滞后的程序,就会导致编译出错。
这种情况下通过 add_deps()
配置接口去控制指定 target 的编译依赖顺序,对一些依赖静态库、动态库的可执行程序非常有用。
链接和编译的依赖控制
为了了解如何使用 add_deps
来控制编译依赖顺序,我们先重新创建个 deps_test
的空工程。
cd ~/Code
xmake create deps_test
然后修改 deps_test/xmake.lua 配置。
target("test1")
set_kind("binary")
add_files("src/*.cpp")
add_deps("test2")
target("test2")
set_kind("binary")
add_files("src/*.cpp")
add_deps("test3")
target("test3")
set_kind("binary")
add_files("src/*.cpp")
上述配置,我们使用 add_deps
将三个 target 目标程序的依赖顺序调整为:test1 依赖 test2, test2 依赖 test3。
那么执行编译的时候的,test3 会优先编译,然后是编译 test2,最后才编译 test1。
执行 xmake
查看实际的编译顺序。
通过上图,我们可以看到最后三个程序的实际链接顺序确实已经按照刚刚设置的依赖顺序进行执行了,不过其 C++ 源文件还是在最开始就执行编译了。