2017-03-09 137 views
0

我想编写一个cmake脚本来查找directx 12 sdk的目录。该目录位于$ENV{ProgramFiles}/Windows Kits/10/Include/。但是,在这条路上,它有许多不同版本的SDK,它存储在不同的目录中。如10.0.10150,10.0.10240,10.0.10586等。如何获取cmake路径上的所有目录名称?

我不知道有多少版本的SDK。所以我想要获得这个路径上的所有目录。但我应该怎么做? 这样的目录:

  • $ ENV {} PROGRAMFILES/Windows的套件/ 10 /包含/
    • 10.0.10150
    • 10.0.10240
    • 10.0.10586

谢谢。

+2

[CMake:如何获取目录中所有子目录的名称?](http://stackoverflow.com/questions/7787823/cmake-how-to-get-the-name-of-all目录的子目录) – Tsyvarev

+2

哪个版本的CMake和您使用的是哪个版本的Visual Studio?因为对于Visual Studio 2015及更高版本,SDK版本位于['CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION'](https://cmake.org/cmake/help/v3.4/variable/CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION.html)全局变量中。 – Florian

回答

0

谈到我的意见为答案

根据"Where is the DirectX SDK (2015 Edition)?"它现在是在Windows 10 SDK(已添加的路径表明您已经安装)的一部分。

如果我们只谈论SDK中的头文件,那么您就不需要任何东西。只需包含它们,Visual Studio就会找到正确的SDK标头(与您的项目设置相匹配)。

要回答你的问题,我看到了以下可能性(与我的VS2015社区版测试):

file(TO_CMAKE_PATH "$ENV{ProgramFiles}" _progFilePath) 
message("${_progFilePath}/Windows Kits/10/Include/${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}") 

输出我的机器

上:

  1. 使用CMake的变量CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION

    C:/Program Files/Windows Kits/10/Include/10.0.14393.0 
    
  2. 让CMake的做调查的DirectX头与find_file()的工作:

    find_file(_directXHeader "d3d9.h") 
    get_filename_component(_directXPath "${_directXHeader}" DIRECTORY) 
    message("${_directXPath}") 
    

    输出我的机器上

    C:/Program Files (x86)/Windows Kits/10/Include/10.0.14393.0/shared 
    
  3. 直接使用Visual Studio宏象

    add_compile_options("/I%(WindowsSDK_IncludePath)") 
    
+0

谢谢!它正在正常工作! – LeLe570929726