Как получить все имя каталога по пути в cmake?

Я хочу написать скрипт 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 / Включить /
    • 10.0.10150
    • 10.0.10240
    • 10.0.10586

Благодарю.

1 ответ

Решение

Превращаю мой комментарий в ответ

Согласно "Где находится DirectX SDK (2015 Edition)?" теперь он является частью Windows 10 SDK (пути, которые вы добавили, указывают, что вы уже установили его).

Если мы говорим только о заголовках в SDK, с вашей стороны ничего не требуется. Просто включите их, и Visual Studio найдет правильные заголовки SDK (соответствующие настройкам вашего проекта).

Чтобы ответить на ваш вопрос, я вижу следующие возможности (протестировано с моим VS2015 Community Edition):

  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 выполнит работу по поиску заголовков 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)")
    
Другие вопросы по тегам