如何在解决方案资源管理器上保留源文件夹层次结构?
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)
【讨论】:
以上是关于如何在解决方案资源管理器上保留源文件夹层次结构?的主要内容,如果未能解决你的问题,请参考以下文章