为了提高项目的可维护性,我们通常会将不同用途的代码文件放到不同的文件夹中,如头文件放到include目录,源文件放到src目录,第三方库放到3rd目录等。
当使用CMake生成Visual Studio工程时,我们亦希望在Visual Studio中能看到这样的文件结构。当然,我们可以使用source_group
指令进行添加,但当目录和层级很多时,这样添加起来就显得比较繁琐了,本文介绍一种懒人方法。
函数group_sources
用于遍历传入文件并根据文件所在目录添加source_group
指令。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| function(group_sources) foreach(_source IN ITEMS ${ARGN}) if (IS_ABSOLUTE "${_source}") file(RELATIVE_PATH _source_rel "${CMAKE_CURRENT_SOURCE_DIR}" "${_source}") else() set(_source_rel "${_source}") endif()
get_filename_component(_source_path "${_source_rel}" PATH)
string(REPLACE "/" "\\" _source_path_msvc "${_source_path}")
source_group("${_source_path_msvc}" FILES "${_source}") endforeach() endfunction()
|
函数group_sources
支持传入多个参数,使用方法如下:
1 2 3 4 5
| file(GLOB_RECURSE HEADER_FILES ./include/*.hpp ./include/*.h) file(GLOB_RECURSE SOURCE_FILES ./src/*.cc ./src/*.cpp)
group_sources(${HEADER_FILES} ${SOURCE_FILES})
|