什么是 PREMAKE 错误:Error: [string "src/base/api.lua"]:592: bad argument #2 to 'deferredjoin' (string expected, got table)?

所以,我开始了这个新项目并编写我的 premake 脚本,但是生成它失败并生成了这个错误:_[string "src/base/api.lua"]:592: bad argument #2 to 'deferredjoin' (string expected, got table)_

通常,当它只是一个打字错误时,错误消息会包括脚本中的行号。我查看了 premake 源文件中的错误,但无法解决它。

这是脚本:

workspace "DX12"
    architecture "x86_64"
    startproject "Demo"

    configurations
    {
        "Debug",
        "Release"
    }

    flags
    {
        "MultiProcessorCompile"
    }

outputdir = "%{cfg.buildcfg}-%{cfg.system}-%{cfg.architecture}"

project "Demo"
    location "Demo"
    kind "WindowedApp"
    language "C++"
    cppdialect "C++17"
    staticruntime "on"

    targetdir {"bin/" .. outputdir .. "/%{prj.name}"}
    objdir    {"bin-int/" .. outputdir .. "/%{prj.name}"}

    files
    {
        "%{prj.name}/src/**.h",
        "%{prj.name}/src/**.cpp"
    }

    includedirs
    {
        "%{prj.name}/src"
    }



    links
    {
        "d3d12.lib",
        "dxgi.lib",
        "d3dcompiler.lib"
    }

    filter "system:windows"
        systemversion "latest"

    filter "configurations:Debug"
        defines "DEBUG"
        runtime "Debug"
        symbols "on"

    filter "configurations:Release"
        defines "RELEASE"
        runtime "Release"
        optimize "on"

这个脚本有什么问题,是什么导致生成此错误?

点赞
用户4567755
用户4567755

targetdirobjdir 都预期有一个参数,表示路径。Premake 通常将路径作为字符串处理,以方便用户使用简化语法来省略括号。他们通常使用这种简化语法来呈现它们的示例,但有时可能会产生误解。

将:

    targetdir {"bin/" .. outputdir .. "/%{prj.name}"}
    objdir    {"bin-int/" .. outputdir .. "/%{prj.name}"}

转换为:

    targetdir ("bin/" .. outputdir .. "/%{prj.name}")
    objdir    ("bin-int/" .. outputdir .. "/%{prj.name}")
2020-07-24 20:25:32