CMake:如何获取目录的所有子目录的名称? [英] CMake : How to get the name of all subdirectories of a directory?
问题描述
我有两个相对于CMake的问题
1)假设我们有一个变量 $ {MY_CURRENT_DIR}
其中包含包含多个子目录的目录的路径:mydir1,mydir2和mydir3。我想检测这些子目录,并将他们的名字放在 $ {SUBDIRS}
(不是这些目录的完整路径,只有他们的名字)。如何自动完成?
2)假设 $ {SUBDIRS}
包含mydir1 mydir2 mydir3。如何替换
ADD_SUBDIRECTORY(mydir1)
ADD_SUBDIRECTORY(mydir2)
ADD_SUBDIRECTORY(mydir3)$ b $ $ {SUBDIRS}
?
非常感谢。
解决方案 1)使用此宏: / p>
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()
pre>
示例:
SUBDIRLIST(SUBDIRS $ {MY_CURRENT_DIR})
2)使用 foreach
:
FOREACH(subdir $ {SUBDIRS})
ADD_SUBDIRECTORY($ {subdir})
ENDFOREACH b
I have two questions relative to CMake
1) Assume that we have a variable ${MY_CURRENT_DIR}
that contains the path of a directory that contains several subdirectories : mydir1, mydir2 and mydir3. I want to detect these subdirectories and put their names into ${SUBDIRS}
(not the complete path of these directories, only their name). How to do that automatically ?
2) Assume that ${SUBDIRS}
contains "mydir1 mydir2 mydir3". How to replace
ADD_SUBDIRECTORY(mydir1)
ADD_SUBDIRECTORY(mydir2)
ADD_SUBDIRECTORY(mydir3)
by a loop over ${SUBDIRS}
?
Thank you very much.
解决方案 1) Use this 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()
Example:
SUBDIRLIST(SUBDIRS ${MY_CURRENT_DIR})
2) Use foreach
:
FOREACH(subdir ${SUBDIRS})
ADD_SUBDIRECTORY(${subdir})
ENDFOREACH()
这篇关于CMake:如何获取目录的所有子目录的名称?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!