我一直在尝试从命令行编译一个简单的 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 路径设置。
使用 VS2022 工具的 x64 命令提示符而不是普通的 CMD。它将运行一个脚本来配置 cl 环境。
以D3D12Fullscreen为例。
No
项目属性 ->
C++ -> General
和
Linker -> General
。
然后构建项目,这样就可以在Visual Studio中看到构建命令,并将其复制到记事本中。
我删除了一部分不必要的命令。您需要做的是替换路径:
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 文件夹。