Skip to content

builddir 变量解析失败 #6466

@dzylikecode

Description

@dzylikecode

Xmake 版本

2.9.9

操作系统版本和架构

ubuntu 22.04

描述问题

在使用xmake构建项目时,发现$(builddir)变量没有被正确解析,导致系统尝试在根目录创建文件夹而失败。

具体表现

  • xmake.lua中的after_build脚本尝试使用$(builddir)/native路径
  • 实际解析结果为/native(根目录下的native),而非预期的项目构建目录下
  • 由于权限不足,无法在系统根目录创建文件夹,导致构建失败

相关代码

在xmake.lua文件中:

after_build(function (target)
    os.rm("$(builddir)/native")
    os.mkdir("$(builddir)/native")
    os.cp("include/*", "$(builddir)/native")
    os.cp(target:targetfile(), "$(builddir)/native")
end)

期待的结果

期望$(builddir)/native能正确解析为项目构建目录下的native子目录,而不是系统根目录下的native。

工程配置

可复现仓库:https://github.com/dzylikecode/bug-xmake-issue-6361

add_rules("mode.debug", "mode.release")

add_requires("serial") -- GitHub: wjwwood/serial
add_requires("fmt") -- GitHub: fmtlib/fmt

target("serial_port")
    set_kind("shared")
    set_languages("c++17")
    add_includedirs("include", {public = true})
    add_files("src/*.cpp")
    add_packages("serial")
    add_defines("BUILDING_DLL")

    after_build(function (target)
        os.rm("$(builddir)/native")
        os.mkdir("$(builddir)/native")
        os.cp("include/*", "$(builddir)/native")
        os.cp(target:targetfile(), "$(builddir)/native")
    end)

function add_example(name)
    target(name)
        set_kind("binary")
        set_languages("c++17")
        add_includedirs("include", {public = true})
        add_files("examples/" .. name .. ".cpp")
        add_deps("serial_port")
        add_packages("fmt")
end

add_example("list_ports")

附加信息和错误日志

error: @programdir/core/main.lua:329: @programdir/actions/build/main.lua:148: @programdir/modules/async/runjobs.lua:325: @programdir/core/sandbox/modules/os.lua:223: cannot create directory: /native, Not access because it is busy
stack traceback:
    [C]: in function 'error'
    [@programdir/core/base/os.lua:1075]:
    [@programdir/core/sandbox/modules/os.lua:223]: in function 'mkdir'
    [./xmake.lua:21]: in function 'after_build'
    [@programdir/actions/build/build.lua:127]: in function 'jobfunc'
    [@programdir/modules/async/runjobs.lua:241]:

stack traceback:
        [C]: in function 'error'
        @programdir/core/base/os.lua:1075: in function 'base/os.raiselevel'
        (...tail calls...)
        @programdir/core/main.lua:329: in upvalue 'cotask'
        @programdir/core/base/scheduler.lua:406: in function <@programdir/core/base/scheduler.lua:399>

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions