如何使用CMake实现Visual Studio根过滤器下文件的整洁放置
解决方案
你遇到的根目录文件无法通过source_group(TREE)直接映射到解决方案根节点的问题,本质是没有禁用Visual Studio的默认源文件分组规则,无需拆分根目录和子目录文件,按以下配置即可实现单条source_group调用完成需求,适配CMake 3.8及以上版本:
完整配置代码
# 全局配置:启用文件夹支持,禁用VS默认的「Source Files」「Header Files」自动分组 set_property(GLOBAL PROPERTY USE_FOLDERS ON) # 读取目标关联的所有源文件和头文件 get_target_property(local_app_sources ${my_target} SOURCES) get_target_property(local_app_headers ${my_target} HEADERS) set(local_app_files ${local_app_sources} ${local_app_headers}) # 可选:过滤掉构建目录下的生成文件,避免分组异常 list(FILTER local_app_files INCLUDE REGEX "^${CMAKE_CURRENT_SOURCE_DIR}/.*") # 一次性完成目录结构映射,无需手动拆分根目录/子目录文件 source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${local_app_files})
关键说明
- 不需要添加
PREFIX参数,source_group(TREE)默认前缀为空,刚好匹配你不需要顶层前置目录的需求 - 所有传入
FILES的文件路径必须为绝对路径且以${CMAKE_CURRENT_SOURCE_DIR}开头,或为相对于${CMAKE_CURRENT_SOURCE_DIR}的相对路径,才能正确计算相对路径生成嵌套过滤器 - 若你使用
file(GLOB)采集文件,只要GLOB的根路径是${CMAKE_CURRENT_SOURCE_DIR},路径格式天然符合要求,无需额外处理
内容的提问来源于stack exchange,提问作者Vaillancourt
相关产品推荐
相关产品推荐

