如何在解决方案资源管理器上保留源文件夹层次结构?

Posted

技术标签:

【中文标题】如何在解决方案资源管理器上保留源文件夹层次结构?【英文标题】:How to keep source folders hierarchy on solution explorer? 【发布时间】:2015-12-11 03:23:41 【问题描述】:

我在 Linux 上做了一个 C++ 项目,我将源文件分组在许多目录中以组织自己。

我是用CMake编译的,每个子目录下有一个CMakeFiles.txt。

srcs
|--folderA
|  |--Toto.cpp
|  |--Tata.cpp
|
|--folderB
|  |--Foo.cpp
|  |--Bar.cpp
[...]

最近,我用 Visual Studio 2015 打开它,它找到了每个源文件,但只是将整个列表放在解决方案资源管理器的“源文件”文件夹中。

Source Files
|--Toto.cpp
|--Tata.cpp
|--Foo.cpp
|--Bar.cpp

我打算有大量的文件,很快就很难找到了。

有没有办法明确告诉它尊重解决方案资源管理器上的文件夹层次结构?

【问题讨论】:

什么版本的 CMake? @JamesAdkison 我正在使用最后一个,3.3.1。 我添加了一个assign_source_group 示例实现,您可能会发现我在How to set Visual Studio Filters for nested sub directory using cmake 中的回答很有用。 @JamesAdkison 多亏了这个,我成功了。问题解决了。 【参考方案1】:

使用source_group 命令。

source_group(<name> [文件<src>...] [REGULAR_EXPRESSION <regex>])

定义一个组,将源文件放入项目文件中。这旨在在 Visual Studio 中设置文件选项卡。选项有:

文件 任何明确指定的源文件都将放在 group 中。相对路径是相对于当前源目录解释的。

REGULAR_EXPRESSION 任何名称与正则表达式匹配的源文件都将放在组中。

【讨论】:

【参考方案2】:

@James Adkison 是正确的; source_group 是您想要使用的。从 CMake 3.8 开始,改进的 source_group 命令现在提供了一个 TREE 参数来递归搜索您的源层次结构以创建源组以匹配它。这是您提供的示例的基本解决方案:

project(MyProj)

set(MyProj_SOURCES
    "folderA/Toto.cpp"
    "folderA/Tata.cpp"
    "folderB/Foo.cpp"
    "folderB/Bar.cpp"
)

add_executable(Main $MyProj_SOURCES)

# Create the source groups for source tree with root at CMAKE_CURRENT_SOURCE_DIR.
source_group(TREE $CMAKE_CURRENT_SOURCE_DIR FILES $MyProj_SOURCES)

【讨论】:

以上是关于如何在解决方案资源管理器上保留源文件夹层次结构?的主要内容,如果未能解决你的问题,请参考以下文章

怎么将一个资料夹里面的exe档案

如何在 gnu arm eclipse 或 cdt 上的项目资源管理器上设置或替换文件?

如何重新配置​​平面文件连接管理器上的列信息?

自动更新在 IIS 管理器上运行的本地客户端网站

如何在 C++ 中更改任务管理器上的进程名称?

在关系数据库中存储文件夹层次结构