使用 VS 从命令行编译简单的 DirectX 程序

问题描述 投票:0回答:1

我一直在尝试从命令行编译一个简单的 DirectX 程序,但没有成功。

我从 https://github.com/microsoft/DirectX-Graphics-Samples下载了示例,在 VS 中打开任何项目,对其进行编译并运行。

现在我想要更轻松一点,只需从命令行编译我的 DirectX 程序,而不需要创建 VS 项目。

我写了以下命令:

"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.39.33519/bin/Hostx64/x64/cl.exe" ^
    /I "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.39.33519/include" ^
    /I "C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0/um" /I "C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0/ucrt" /I "C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0/cppwinrt" /I "C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0/shared" /I "C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0/winrt" ^
    /I "C:\Users\spl1nes\.nuget\packages\microsoft.direct3d.d3d12\1.613.1\build\native\include" /I "C:\Users\spl1nes\.nuget\packages\microsoft.direct3d.d3d12\1.613.1\build\native\include\d3dx12" /I "C:\Users\spl1nes\.nuget\packages\microsoft.direct3d.d3d12\1.613.1\build\native" ^
    /nologo /W4 /ZI /Od /MDd /GS /EHsc /sdl^
    /D WIN32 /D _DEBUG /D _WINDOWS /D _UNICODE /D UNICODE ^
    /Fo"build/" /Fe"build/main.exe" "src/main.cpp" /Fd"build/main.pdb" ^
    /link ^
    -incremental:no /SUBSYSTEM:windows^
    /LIBPATH:"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.39.33519/lib/x64" ^
    /LIBPATH:"C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22000.0/um/x64" /LIBPATH:"C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22000.0/ucrt/x64" ^
    user32.lib kernel32.lib gdi32.lib winmm.lib d3d12.lib dxgi.lib d3dcompiler.lib dxguid.lib

但是,每当我尝试编译代码时,我都会收到以下第一个错误:

C:\Users\spl1nes\.nuget\packages\microsoft.direct3d.d3d12\1.613.1\build\native\include\d3dx12\d3dx12_property_format_table.h(29): error C3646: 'Layout': unknown override specifier

还有更多错误在

drdx12_property_format_table.h
cstdlib
,...错误本身看起来像这样荒谬:

C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\cstdint(20): error C2059: syntax error: 'namespace'

这就是为什么我认为我缺少一些包含或库或 VS 路径设置。

c++ visual-studio visual-studio-2022 directx-12
1个回答
0
投票

使用 VS2022 工具的 x64 命令提示符而不是普通的 CMD。它将运行一个脚本来配置 cl 环境。

D3D12Fullscreen为例。

  1. 在 Visual Studio 中打开项目:在两者中设置抑制启动横幅:
    No

项目属性 ->

C++ -> General
Linker -> General

然后构建项目,这样就可以在Visual Studio中看到构建命令,并将其复制到记事本中。

  1. 清理项目并从命令行构建项目。

我删除了一部分不必要的命令。您需要做的是替换路径:

XXX\Downloads\DirectX-Graphics-Samples\XXXX

cl /I“XXX\Downloads\DirectX-Graphics-Samples-master\Samples\Desktop\D3D12Fullscreen\src\packages\WinPixEventRuntime.1.0.161208001 uild..\Include\WinPixEventRuntime” /ZI /JMC /W3 /WX- /诊断:列 /sdl /Od /D WIN32 /D 调试 /D _WINDOWS /D _UNICODE /D UNICODE /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo"obj\x64\Debug\" /external:W3 /Gd /TP /FC /errorReport:提示D3D12Fullscreen.cpp DXSample.cpp Main.cpp Win32Application.cpp /link “/LIBPATH:XXX\Downloads\DirectX-Graphics-Samples-master\Samples\Desktop\D3D12Fullscreen\src\packages\WinPixEventRuntime.1.0.161208001 uild..” WinPixEventRuntime.lib dxgi.lib d3d12.lib d3dcompiler.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Delayimp.lib /DELAYLOAD:d3d12.dll /MANIFEST /manifest:embed “/manifestinput:C:\Program Files\Microsoft Visual Studio�2\Community\VC\Tools\MSVC .38.33130\Include\Manifest\PerMonitorHighDPIAware.manifest" /DEBUG“/PDB:bin\x64\Debug\D3D12Fullscreen.pdb”/SUBSYSTEM:WINDOWS /TLBID:1 /动态库 /NXCOMPAT “/IMPLIB:bin\x64\Debug\D3D12Fullscreen.lib”/MACHINE:X64 “/OUT:bin\x64\Debug\D3D12Fullscreen.exe”

构建完成后,不要忘记将

postShaders.hlsl
sceneShaders.hlsl
WinPixEventRuntime.dll
复制到 exe 文件夹。

© www.soinside.com 2019 - 2024. All rights reserved.