Подтвердить что ты не робот

CMake: Как получить имя всех подкаталогов каталога?

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

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

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

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

по циклу над ${SUBDIRS}?

4b9b3361

Ответ 1

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