如何在cmake的路径上获取所有目录名称?

时间:2017-03-09 07:19:03

标签: cmake directx-12

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

我不知道有多少版本的SDK。所以我想在这条路径上获取所有目录。但我该怎么办? 像这样的目录:

  • $ ENV {ProgramFiles} / Windows Kits / 10 / Include /
    • 10.0.10150
    • 10.0.10240
    • 10.0.10586

感谢。

1 个答案:

答案 0 :(得分:0)

将我的评论转化为答案

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

如果我们只讨论SDK中的标题,那么您的身边不需要任何内容​​。只需包含它们,Visual Studio就会找到合适的SDK标题(与您项目的设置相匹配)。

要回答您的问题,我会看到以下可能性(使用我的VS2015社区版测试):

  1. 使用CMake变量CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION

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

    我机器上的输出

    C:/Program Files/Windows Kits/10/Include/10.0.14393.0
    
  2. 让CMake完成使用find_file()找到DirectX标头的工作:

    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)")