跳转到内容

自定义工具链

我们可以使用 toolchain() 定义自定义工具链,以支持特殊的编译器或交叉编译环境。

关于自定义工具链的更多详情,请参考:自定义工具链 API

基础示例

EXPLORER
src
main.cpp
xmake.lua
Lua xmake.lua
12345678910111213141516171819
add_rules("mode.debug", "mode.release")

toolchain("myclang")
    set_kind("standalone")
    set_toolset("cc", "clang")
    set_toolset("cxx", "clang++")
    set_toolset("ld", "clang++")
    on_check(function (toolchain)
        return import("lib.detect.find_tool")("clang")
    end)
    on_load(function (toolchain)
        toolchain:add("cxflags", "-DTEST_MACRO")
    end)
toolchain_end()

target("test")
    set_kind("binary")
    add_files("src/main.cpp")
    set_toolchains("myclang")

编译运行

bash
$ xmake
$ xmake run

未知工具链

如果我们需要支持一个完全未知的编译器工具链,我们需要实现工具链的探测脚本,以及编译、链接、归档等所有工具集的脚本配置。

EXPLORER
src
foo.cpp
test.cpp
xmake
modules
core
tools
cl6x
has_flags.lua
parse_deps.lua
ar6x.lua
cl6x.lua
detect
tools
find_ar6x.lua
find_cl6x.lua
toolchains
my-c6000
xmake.lua
xmake.lua
Lua xmake.lua
123456789101112131415
add_rules("mode.debug", "mode.release")

add_moduledirs("xmake/modules")
add_toolchaindirs("xmake/toolchains")

set_toolchains("my-c6000")

target("test")
    set_kind("static")
    add_files("src/foo.cpp")

target("demo")
    set_kind("binary")
    add_deps("test")
    add_files("src/test.cpp")