visual-studio - CLion 相当于 Visual Studio C++“过滤器”
问题描述
语境
在 Visual Studio IDE 中,对于 C++ 解决方案,您可以使用所谓的“过滤器”来模拟源文件树/目录,同时通常将每个项目的所有源代码保留在每个项目的根目录中。主要优点是能够直接#include "foo.h"
我一直在尝试将一些解决方案“切换”到 CLion,因为它专注于多平台,并试图将对 CMake+GCC 的支持添加到现有的 VS 解决方案中,因为没有跨平台 IDE 对.sln/.vcxproj
文件具有原生支持
现在 - 我知道一些较大的 CMake 项目(如解决方案/子项目组)经常使用普通文件系统子目录来进一步分解每个子项目中的代码,但由于一些“解决方案”我试图添加 CMake 支持到,考虑到几百个源文件,我真的无法手动重构所有内容并更改#include "service_foo.h"
为#include service/service_foo.h
每个源文件。
还要考虑的另一件事是我没有迁移解决方案以使用 CMake - 我正在添加对 CMake 构建/CLion IDE 支持以及 MSBuild 工具链/VS IDE 支持的支持,因此我不想引入任何重大更改。
我对 JetBrains IDE 生态系统还很陌生,所以我想知道是否有一些东西可以提供这种开箱即用的功能,或者可能带有插件。
问题
有没有办法在不更改文件系统的情况下将源文件分组,即在 CLion IDE 的项目视图工具箱中?
到目前为止在文档中找不到任何东西,但它与Code Hierarchy类似,但用于.h/.cpp
文件。
例子
文件系统结构(在磁盘上可见)
$REPO_ROOT
是*.vcxproj, .idea/
等提供的存储库。
Main CMakeList.txt: $REPO_ROOT/CmakeList.txt
Example subprojects: $REPO_ROOT/foo_slib/ $REPO_ROOT/program/
Example Source files: $REPO_ROOT/program/main.cpp $REPO_ROOT/program/gui_init.h $REPO_ROOT/program/VulkanDelegate.h
项目/解决方案根结构(如 IDE 中的项目工具箱视图中所示)
$VIEW_ROOT
是为 CLion 打开的主项目或为 MSVS 打开的 .sln,如在每个 IDE 中的项目视图中所示
Main CmakeList.txt: $VIEW_ROOT/CMAKE/CmakeList.txt
Example subprojects: $VIEW_ROOT/foo_slib/ $VIEW_ROOT/program/
Example Source files: $VIEW_ROOT/program/main.cpp $VIEW_ROOT/program/GUI/gui_init.h $VIEW_ROOT/program/Delegates/VulkanDelegate.h
解决方案
您肯定不需要编辑源文件和更改包含路径。没有什么可以阻止您#include
使用编译器包含路径选项 -I<path>
实现相同的路径。在 CLion 中,它通过CMake 的 target_include_directories指令进行控制。您可能还必须弄清楚项目是如何链接的。
您可以将文件和文件夹添加到 CLion 的收藏夹。您可以拥有多组收藏夹,因此可以模拟项目中的任意虚拟文件夹。
对于更复杂的查询语言,有Scopes。您可以设置它们,然后它们将出现在Project 视图的 Views 下拉列表中,每个都作为一个单独的视图。
推荐阅读
- amazon-web-services - AWS Cloudshell 无法启动 docker 服务
- iis - IIS突然停止加载图片、css、js等文件
- progressive-web-apps - 服务工作者中 cookie 存在的 NetworkFirst 策略
- python - 如何任意向 wxPythonsizer 添加项目?
- elasticsearch - 我应该为 Elasticsearch 服务器分配多少内存
- sqoop - 将列名称为“From”、“To”的数据通过 sqooping 到 Vertica 时出错
- angular - 当我们的范围很小时,如何强制 y 轴 forceNiceScale 工作?
- probability - 你如何根据一个人的属性来近似状态转换?
- javascript - jQuery循环数组以在新行显示每个元素
- java - Spring Boot:自动装配映射器失败