J'ai deux questions concernant CMake
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?
Suppose que ${SUBDIRS}
contient "mydir1 mydir2 mydir3". Comment remplacer
ADD_SUBDIRECTORY(mydir1)
ADD_SUBDIRECTORY(mydir2)
ADD_SUBDIRECTORY(mydir3)
par une boucle sur ${SUBDIRS}
?
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})
Utilisez foreach
:
FOREACH(subdir ${SUBDIRS})
ADD_SUBDIRECTORY(${subdir})
ENDFOREACH()