我有一个非常坚韧的时间试图弄清楚如何DirectX 11(特别是我对Direct3D感兴趣)可以与Windows 10上的CMake集成。
在C:\Windows\System32
中可以找到运行时库(DLL),因为现在DirectX已经集成到Windows 10的安装中(对我来说很重要的是d3d11.dll
和d3dx11.dll
)。然而,DLL并不足以开发使用DirectX的代码。
在Windows 10上开发软件通常需要Windows SDK。我有10和8.1。DirectX 9,10,11和12相关的文件可以在C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\um\x86
或...\x64
中找到,这取决于你是想要32位还是64位。在C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um
中可以找到头文件。
人们说简单地做
target_link_libraries(my_project PRIVATE d3d11 d3dx11)
应该可以做到这一点。但是,我收到一个错误(使用CMake 3. 12与Visual Studio 2017 Pro,前者作为后者的一部分发货),找不到.lib
。
我尝试添加以下内容
link_directories("C:\\Program Files (x86)\\Windows Kits\\10\\Lib\\10.0.17763.0\\um\\x64")
include_directories("C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.17763.0\\um")
但一切都没变。
下面是我的简单项目的完整CMakeLists.txt
:
cmake_minimum_required (VERSION 3.12)
link_directories("C:\\Program Files (x86)\\Windows Kits\\10\\Lib\\10.0.17763.0\\um\\x64")
include_directories("C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.17763.0\\um")
get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
foreach(dir ${dirs})
message(STATUS "Include directory: \"${dir}\"")
endforeach()
get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY LINK_DIRECTORIES)
foreach(dir ${dirs})
message(STATUS "Link directory: \"${dir}\"")
endforeach()
add_executable (DirectX11_CMake_Example "DirectX11_CMake_Example.cpp" "DirectX11_CMake_Example.h")
target_compile_definitions(DirectX11_CMake_Example PRIVATE "UNICODE" "_UNICODE")
target_link_libraries(DirectX11_CMake_Example PRIVATE d3d11 d3dx11)
1条答案
按热度按时间dw1jzc5e1#
我在GitHub上提供了基本的“游戏循环”,包括窗口、设备和交换链,适用于DirectX 11和DirectX 12,包括“经典”Win32项目和UWP应用程序。存储库主要为VSIX构建Visual Studio模板,但我也提供了一个简单的PowerShell脚本和CMakeLists.txt文件来示例化CMake的模板。请参见wiki。
您的案例的结果
CMakeLists.txt
为:D3DX11
实用程序库已弃用,仅作为旧版DirectX SDK的一部分提供。对于新项目,您应避免使用this blog post。* 也就是说 *,如果您确实想在CMake中使用它,您可以使用vcpkg和dxsdk-d3 dx端口。