web-dev-qa-db-fra.com

CMake: Comment obtenir le nom de tous les sous-répertoires d'un répertoire?

J'ai deux questions concernant CMake

  1. Supposons que nous ayons une variable ${MY_CURRENT_DIR} qui contient le chemin d'un répertoire contenant plusieurs sous-répertoires: mydir1, mydir2 et mydir3. Je veux détecter ces sous-répertoires et mettre leurs noms dans ${SUBDIRS} (pas le chemin complet de ces répertoires, seulement leur nom). Comment faire ça automatiquement?

  2. Suppose que ${SUBDIRS} contient "mydir1 mydir2 mydir3". Comment remplacer

    ADD_SUBDIRECTORY(mydir1)
    ADD_SUBDIRECTORY(mydir2)
    ADD_SUBDIRECTORY(mydir3)
    

par une boucle sur ${SUBDIRS}?

40
Vincent
  1. Utilisez cette macro:

    MACRO(SUBDIRLIST result curdir)
      FILE(GLOB children RELATIVE ${curdir} ${curdir}/*)
      SET(dirlist "")
      FOREACH(child ${children})
        IF(IS_DIRECTORY ${curdir}/${child})
          LIST(APPEND dirlist ${child})
        ENDIF()
      ENDFOREACH()
      SET(${result} ${dirlist})
    ENDMACRO()
    

    Exemple:

    SUBDIRLIST(SUBDIRS ${MY_CURRENT_DIR})
    
  2. Utilisez foreach:

    FOREACH(subdir ${SUBDIRS})
      ADD_SUBDIRECTORY(${subdir})
    ENDFOREACH()
    
87
refaim