1. 问题描述
在使用CMake构建工程,如果项目中存在多层级目录时,构建的VS工程中的.h和.cpp文件会自动整理在HeaderFile和SourceFile中,具体如下:
这样的情况不便于开发人员对文件目录进行分类和阅读。工程目录结构也不够清晰,无法与实际磁盘存储的文件夹对应上。那么有什么方法可以构建出多层级目录呢,同时能够与实际的文件夹对应上呢。
2. 解决方案
如上问题,我们可以通过编写如下的cmake函数,来自定义构建多层级目录:
# 组织工程文件夹
file(GLOB_RECURSE HEAD *.h)
file(GLOB_RECURSE SOURCE *.cpp)
set(AllFile ${HEAD} ${SOURCE})
foreach(fileItem ${AllFile})
# Get the directory of the source file
get_filename_component(PARENT_DIR "${fileItem}" DIRECTORY)
# Remove common directory prefix to make the group
string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "" GROUP "${PARENT_DIR}")
# Make sure we are using windows slashes
string(REPLACE "/" "\\" GROUP "${GROUP}")
# Group into "Source Files" and "Header Files"
set(GROUP "${GROUP}")
source_group("${GROUP}" FILES "${fileItem}")
endforeach()
如果你的CMakeLists文件在当前目录下时,你需要构建出当前目录的过滤器,就可以将${CMAKE_CURRENT_SOURCE_DIR}替换成当前目录的上一级目录。
通过如上的方法,可得到如下的层级目录
这样的工程目录结构是不是看起来清晰很多。