整体工程目录结构如下。现打算获取到vac目录下的所有子目录名。
cmake 实现如下:
# 设定要遍历的目录,保存到 VAC_INCLUDE_DIR 变量
set(VAC_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/vac)# 获取到当前目录下的所有文件和目录(以相对路径的方式),保存到 ALL_ITEMS 变量
file(GLOB ALL_ITEMS RELATIVE ${VAC_INCLUDE_DIR} ${VAC_INCLUDE_DIR}/*)# 遍历所有的文件
foreach(ITEM ${ALL_ITEMS})# 判断是否为目录if(IS_DIRECTORY ${VAC_INCLUDE_DIR}/${ITEM})message(WARNING ${ITEM})endif()
endforeach()
注意:
直接使用下面这种写法,保存到 ALL_ITEMS 中的将会是绝对路径,如C:/project/vac/dir1
file(GLOB ALL_ITEMS ${VAC_INCLUDE_DIR}/*)
加入 RELATIVE ${VAC_INCLUDE_DIR} 以后,获取到的路径将会将相对于${VAC_INCLUDE_DIR},此时保存到 ALL_ITEMS 中的将会是一个单独的目录名,而不带路径前缀
file(GLOB ALL_ITEMS RELATIVE ${VAC_INCLUDE_DIR} ${VAC_INCLUDE_DIR}/*)