DirectX12 с Premake5: связывание статических библиотек Directx12 - PullRequest
0 голосов
/ 07 марта 2019

Я переключаюсь на использование 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 голосов
/ 08 марта 2019

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 функции

0 голосов
/ 07 марта 2019

Для первой части вашего вопроса все, что вам нужно сделать, это использовать links в вашем скрипте. Это будет выглядеть так:

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

Выше будет работать, если файлы lib находятся в корневом каталоге (где построено решение). Если они находятся в других папках, вы можете использовать токены , такие как %{prj.location}, %{prj.name} и т. Д.

...