DirectX12与Premake5:链接Directx12静态库

时间:2019-03-07 08:34:03

标签: c++ premake directx-12

我改用premake5,而不是直接使用Visual Studio 2017。

  • 但是,我无法链接到适当的dx12库

这是我过去与Dx12链接的方式。 我将这些宏放在main.cpp中,效果很好。

    #pragma comment(lib, "d3d12.lib")
    #pragma comment(lib, "dxgi.lib")
    #pragma comment(lib, "d3dcompiler.lib")

但是,建议我不要在源代码中包含库。在将项目转换为premake5时,我想知道处理这种情况的正确方法。

抱歉,我是premake5之类的工具的新手。而且不确定如何进行。

更新1: 我尝试添加以下代码来解决链接器错误。

    print("Linking DX12 Libs") 
    libdirs { 
    os.findlib("d3d12.lib"), 
    os.findlib("dxgi.lib"), 
    os.findlib("d3dcompiler.lib") } 
    links { "d3d12.lib", "dxgi.lib", "d3dcompiler.lib" }

但是,我仍然收到链接器错误。

2 个答案:

答案 0 :(得分:0)

对于问题的第一部分,您需要做的就是在脚本中使用links。看起来像这样:

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

如果lib文件位于根目录(构建解决方案的目录)中,则上面的命令将起作用。如果它们位于其他文件夹上,则可以使用Tokens,例如%{prj.location}%{prj.name}等。

答案 1 :(得分:0)

DLPDev主要*是正确的。

  

*指定库时,应省略系统特定的修饰,例如前缀或文件扩展名。 Premake会根据目标平台自动合成正确的格式。该规则的一个例外是Mac OS X框架,在该框架中需要文件扩展名来标识它。

由于对过滤器功能的无知,我犯了一个严重的错误。在释放过滤器之后,我才调用links。仅在发布模式下链接了dx12库。

   -- This is all you need to link against dx12 there is no special sauce
   -- You don't need to call libdirs or os.findlib for the dx12 libraries
   -- This code works for both configurations since it is called before the filter function
   links { "d3d12", "dxgi", "d3dcompiler" }
   filter("configurations:Debug")
      defines({ "DEBUG" })
      symbols("On")
      optimize("Off")
   filter("configurations:Release")
      defines({ "NDEBUG" })
      symbols("On")`

TLDR:使用links函数时请注意不要包含文件扩展名。并注意filter函数的作用域