CMake:如何获取目录的所有子目录的名称? [英] CMake : How to get the name of all subdirectories of a directory?

查看:6552
本文介绍了CMake:如何获取目录的所有子目录的名称?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个相对于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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆