2

我在 Visual Studio 2013 中使用 premake5,并尝试将第三方库链接到我的项目。这个库的调试版本像往常一样具有“d”后缀。这是示例脚本。

solution "MySln"
    language "C++"
    configurations { "debug", "release" }

    d = ""

    configuration "debug"
        d = "d"

    configuration "release"
        d = ""

    libicu = { "icuin%{d}", "icuuc%{d}" }

project "core"
    kind "SharedLib"
    location "core"
    links(libicu)
    files { "core/**.h", "core/**.cpp" }

但是这个脚本在两个配置(调试和发布)icuin.lib 和 icuuc.lib 中都有链接。如果我在配置“发布”块中删除d = ""分配,那么这两个配置都链接 icund.lib 和 icuucd.lib 库。看起来 premake 在解析 %{d} 占位符时使用了最新看到的变量定义。如何更改我的脚本以获得正确的行为?谢谢!

4

1 回答 1

0

您不能像这样混合变量分配(在脚本评估时评估)和 Premake 配置(在所有项目脚本运行后组装)。

一种解决方案可能是:

solution "MySln"
   language "C++"
   configurations { "debug", "release" }

   filter "configurations:debug"
      targetextension "d"

project "core"
   kind "SharedLib"
   location "core"
   files { "core/**.h", "core/**.cpp" }

   filter "configurations:debug"
      links { "icuind", "icuucd" }
   filter "configurations:release"
      links { "icuin", "icuuc" }

如果你有很多库或者经常这样做,你可以使用一个函数:

project "core"
   links_d { "icuin", "icuuc" }

function links_d(value)
   filter("configurations:debug")
   for i = 1, #value do
       links (value[i] .. "d")
   end
   filter("configurations:release")
   links (value)
   filter("*")
end
于 2015-05-08T18:43:10.683 回答