2017-03-09 2 views
0

Je veux écrire un script cmake pour trouver le répertoire directx 12 sdk. Ce répertoire est en $ENV{ProgramFiles}/Windows Kits/10/Include/. Cependant, sur ce chemin, il a une version différente du SDK qui est stockée dans un répertoire différent. Tels que 10.0.10150, 10.0.10240, 10.0.10586 et ainsi de suite.Comment obtenir tout le nom du répertoire sur un chemin dans cmake?

Je ne sais pas combien de version du SDK. Donc, je veux obtenir tout le répertoire sur ce chemin. Mais comment dois-je faire? Le répertoire comme ceci:

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

Merci.

+2

Copie possible de [CMake: comment obtenir le nom de tous les sous-répertoires d'un répertoire?] (Http://stackoverflow.com/questions/7787823/cmake-how-to-get-the-name-of-all -subdirectories-of-a-directory) – Tsyvarev

+2

Quelle version de CMake et quelle version de Visual Studio utilisez-vous? Parce que pour Visual Studio 2015 et supérieur la version SDK est dans [CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION] (https://cmake.org/cmake/help/v3.4/variable/CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION.html) variable globale. – Florian

Répondre

0

Tournant commentaire dans une réponse

Selon "Where is the DirectX SDK (2015 Edition)?" il fait maintenant partie du SDK de Windows 10 (les chemins que vous avez ajoutés indiquent que vous avez déjà installé).

Si nous ne parlons que des en-têtes du SDK, rien n'est requis de votre part. Il suffit de les inclure et Visual Studio trouvera les bons en-têtes SDK (correspondant aux paramètres de votre projet).

Pour répondre à votre question, je vois les possibilités suivantes (testé avec mon VS2015 Community Edition):

  1. en utilisant la variable 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}") 
    

    sorties sur ma machine

    C:/Program Files/Windows Kits/10/Include/10.0.14393.0 
    
  2. Laissez CMake faire le travail de trouver les en-têtes DirectX avec find_file():

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

    sorties sur ma machine

    C:/Program Files (x86)/Windows Kits/10/Include/10.0.14393.0/shared 
    
  3. utiliser directement des macros Visual Studio comme

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

Merci! Ça fonctionne correctement! – LeLe570929726