CMake: Как получить имя всех подкаталогов каталога? - PullRequest
40 голосов
/ 17 октября 2011

У меня есть два вопроса относительно CMake

  1. Предположим, у нас есть переменная ${MY_CURRENT_DIR}, которая содержит путь к каталогу, который содержит несколько подкаталогов: mydir1, mydir2 и mydir3.Я хочу обнаружить эти подкаталоги и поместить их имена в ${SUBDIRS} (не полный путь этих каталогов, только их имя).Как сделать это автоматически?

  2. Предположим, что ${SUBDIRS} содержит "mydir1 mydir2 mydir3".Как заменить

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

на петлю над ${SUBDIRS}?

1 Ответ

85 голосов
/ 17 октября 2011
  1. Используйте этот макрос:

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

    Пример:

    SUBDIRLIST(SUBDIRS ${MY_CURRENT_DIR})
    
  2. Использование foreach:

    FOREACH(subdir ${SUBDIRS})
      ADD_SUBDIRECTORY(${subdir})
    ENDFOREACH()
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...