Windows 10下CMake集成DirectX 11(Direct3D)配置问题求助
Windows 10下CMake集成DirectX 11的问题解决
核心问题定位
你遇到的找不到.lib的错误,本质是**d3dx11.lib并不在Windows 10 SDK中**:
- Windows 10 SDK只包含Direct3D的核心运行时库(比如
d3d11.lib),而D3DX系列工具库(包括d3dx11.lib)属于旧版DirectX SDK的内容,微软从Windows 10 SDK开始就不再捆绑这些库了。 - 你手动指定的路径是Windows 10 SDK的目录,里面本来就没有
d3dx11.lib,所以即使配置了路径也找不到。
另外,硬编码SDK版本号(10.0.17763.0)的做法不够灵活,会导致配置在其他SDK版本的机器上失效。
解决方案
方案一:替换D3DX11为官方推荐的DirectX Tool Kit(优先选择)
微软已经废弃了D3DX系列,推荐使用DirectX Tool Kit替代,它是开源的,完全兼容CMake,不需要安装旧版SDK:
- 在CMakeLists.txt中添加以下配置来引入DirectX Tool Kit:
cmake_minimum_required(VERSION 3.12) add_executable(DirectX11_CMake_Example "DirectX11_CMake_Example.cpp" "DirectX11_CMake_Example.h" ) # 启用UNICODE target_compile_definitions(DirectX11_CMake_Example PRIVATE UNICODE _UNICODE) # 链接核心Direct3D 11库(CMake会自动从Windows SDK找到d3d11.lib) target_link_libraries(DirectX11_CMake_Example PRIVATE d3d11.lib) # 引入DirectX Tool Kit替代D3DX11 include(FetchContent) FetchContent_Declare( DirectXTK GIT_REPOSITORY https://github.com/microsoft/DirectXTK.git GIT_TAG main ) FetchContent_MakeAvailable(DirectXTK) target_link_libraries(DirectX11_CMake_Example PRIVATE DirectXTK)
- 替换代码中D3DX11的调用为DirectX Tool Kit的API即可。
方案二:安装旧版DirectX SDK(仅当必须保留D3DX11代码时)
如果你一定要继续使用D3DX11,需要安装旧版DirectX SDK(June 2010版本),并调整CMake配置:
cmake_minimum_required(VERSION 3.12) add_executable(DirectX11_CMake_Example "DirectX11_CMake_Example.cpp" "DirectX11_CMake__Example.h" ) target_compile_definitions(DirectX11_CMake_Example PRIVATE UNICODE _UNICODE) # 先引入Windows 10 SDK(避免和旧SDK的头文件冲突) include_directories(SYSTEM "${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}/um") link_directories("${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}/um/${CMAKE_VS_PLATFORM_NAME}") # 再引入旧版DirectX SDK的路径 include_directories(SYSTEM BEFORE "C:/Program Files (x86)/Microsoft DirectX SDK (June 2010)/Include") link_directories("C:/Program Files (x86)/Microsoft DirectX SDK (June 2010)/Lib/${CMAKE_VS_PLATFORM_NAME}") # 链接核心库和D3DX11 target_link_libraries(DirectX11_CMake_Example PRIVATE d3d11.lib d3dx11.lib)
注意:旧SDK和Windows 10 SDK存在头文件冲突,必须用
BEFORE确保Windows 10 SDK的头文件先被包含。
额外验证建议
运行CMake时,查看输出的Include directory和Link directory,确认:
- Windows SDK的路径被正确识别
- 旧版DirectX SDK的路径(如果使用的话)在Windows SDK路径之后
内容的提问来源于stack exchange,提问作者rbaleksandar
相关产品推荐
相关产品推荐

