Visual Studio 2010 项目文件过滤器

2024-03-19

我正在开发一组复杂的 C/C++ 应用程序,这些应用程序也应该是独立于平台的。到目前为止,它与 UNIX/Windows 兼容并且运行良好。然而,在 VS2010 上维护这个怪物是一场噩梦。我有以下文件结构:



/
  sources
    lib1
      include
        ...
      src
        ...
    lib2
      include
        ...
      src
        ...
    app3
      include
        ...
      src
        ...
  builders
    cmake
      ...
    make
      ...
    VS2010
      vs2010.sln
      lib1
        lib1.vcxproj
        lib1.vcxproj.filters
      lib2
        lib2.vcxproj
        lib2.vcxproj.filters
      app3
        app3.vcxproj
        app3.vcxproj.filters
  

正如我们所看到的,因为一切都是平台独立的,所以我必须将构建器与源完全分离。恕我直言,这本身就是一个非常好的做法,每个人都应该强制执行:)

现在的问题是……VS2010在组织过滤器中的包含/源文件时完全无法使用。您必须手动执行此操作,方法是重复执行“添加 -> 新过滤器”,然后执行“添加 -> 退出项目”。我有一个VERY复杂的文件夹结构和每个包含文件夹中的文件。创建过滤器的任务变成了一整天的工作。另一方面,我可以将整个文件夹从资源管理器拖到 VS2010 内的项目上,但它会将所有头文件/源文件放在那里,没有任何过滤器,使其毫无价值:您不可能在 100 个文件中搜索正确的文件一个没有某种等级制度的人..

问题是: VS2010 是否有一些晦涩的方法来导入文件夹并将文件夹结构保留为过滤器?在我看来,创建 VS2010 的 M$FT 人认为 M$FT 是丛林中唯一的动物,你必须用构建器项目污染源文件夹,这样你就可以利用“显示隐藏文件”将它们包含在项目中文件夹结构。恕我直言,这是荒谬的......


您正在使用 CMake,所以我建议您只坚持使用这个。你可以用它生成 makefile 和 VS2010 项目文件(至少)。对于 VS,生成的文件是一个 sln 和一堆 vxproj(CMake 脚本中的每个项目一个)。

在 CMake 文件中,您可以使用以下命令对文件进行分组source_group http://www.cmake.org/cmake/help/v2.8.10/cmake.html#command%3asource_group。过滤器将根据源组自动为 vs 生成。我不知道是否有其他 IDE,例如 Code::Blocks 或 NetBeans。

如果你想根据文件路径自动分组[评论请求]:

# Glob all sources file inside directory ${DIRECTORY}
file(GLOB_RECURSE TMP_FILES
    ${DIRECTORY}/*.h
    ${DIRECTORY}/*.cpp
    ${DIRECTORY}/*.c
)

foreach(f ${TMP_FILES})
    # Get the path of the file relative to ${DIRECTORY},
    # then alter it (not compulsory)
    file(RELATIVE_PATH SRCGR ${DIRECTORY} ${f})
    set(SRCGR "Something/${SRCGR}")

    # Extract the folder, ie remove the filename part
    string(REGEX REPLACE "(.*)(/[^/]*)$" "\\1" SRCGR ${SRCGR})

    # Source_group expects \\ (double antislash), not / (slash)
    string(REPLACE / \\ SRCGR ${SRCGR})
    source_group("${SRCGR}" FILES ${f})
endforeach()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Visual Studio 2010 项目文件过滤器 的相关文章

  • 如何在C++中生成非常大的随机数

    我想使用 C 生成 0 2 64 范围内的非常大的随机数 我已经使用了 rand 函数 但它没有生成非常大的数字 有人可以帮忙吗 使用c 11 使用标准c 11的随机库 http en cppreference com w cpp nume
  • 如何将这段 javascript 代码重写为 C++11?

    这是我在 Javascript Definitive Guide 中看到的 javascript 闭包代码 我想把它写成C 11 var uniqueID1 function var id 0 return function return
  • 更新 Azure Blob 上的 LastModified

    我正在移植代码以使用 C 中的 Azure 存储 SDK 传统上 我称其为更新修改文件的上次写入 修改时间 File SetLastWriteTimeUtc fileName lastWriteTimeUtc 要更新 blob 的上次修改时
  • 如何通过覆盖 MSBuild 目标来防止外语资源生成?

    我正在致力于减少大型 C ASP NET 解决方案的编译时间 我们的解决方案使用通常的 resx 文件方法翻译成大约十几种外语 这些资源文件的解析和编译极大地减慢了我们的编译时间 并且是日常的挫败感 我知道可以创建自定义资源提供程序并摆脱
  • 信号与信号2

    我的应用程序可能会受益于使用 boost 的信号库之一而不是本土解决方案 该应用程序是多线程的 但执行信号处理的部分是单线程的 如果多线程不是问题 是否有任何理由更喜欢 Boost Signals2 而不是 Boost Signal Boo
  • 预编译头和 Visual Studio

    有没有办法设置 Visual Studio 解决方案参数 以便它只创建预编译头而不构建整个解决方案 具体来说 它是一个巨大的 C 解决方案 本身有许多项目 谢谢 仅选择 pch 创建者源文件 通常是 stdafx cpp 然后编译该文件 C
  • 从内存流播放视频文件

    只是好奇看看这是否可能 我有一个 Windows 应用程序 它从我的电脑上的 avi 文件读取所有字节 然后将其存储在 byte 中 现在我的内存中有 avi 文件 我想直接从内存将其加载到某种视频播放器控件中 我尝试过使用 wmplaye
  • 原子存储抛出错误

    我最近升级到了 C 11 兼容编译器 并且尝试将一些代码从 boost 更新到 c 11 标准 我在使用atomic store转换一些代码时遇到了问题 这是一些简单的测试代码 似乎会引发编译器错误 int main std shared
  • 查找方法不适用于 EF6.1 模拟

    我已经使用这些 msdn 指南设置了模拟 使用模拟框架进行测试 EF6 及以上 http msdn microsoft com en us data dn314429 var bsAc db BusAcnts FirstOrDefault
  • ASP.net WebForms - 在标记中使用 GetRouteUrl

    我一直在尝试弄清楚如何将路由功能与 ASP net 4 0 WebForms 一起使用 我将一条路线添加到我的路线集合中 void Application Start RegisterRoutes RouteTable Routes voi
  • 使用 OleDbCommand / OleDbDataAdapter 读取 CSV 文件

    我不明白为什么 但是当我使用 OleDbDataAdapter 或 OleDbCommand 读取 CSV 文件时 在这两种情况下 生成的数据结构良好 它识别文件头中的列 但行数据都是空字符串 我之前已经成功进行过多次 CSV 处理 因此我
  • 从 C# 调用时无法识别 Powershell 命令

    这是这个的延续Question https stackoverflow com questions 66280000 powershell object returns null 66280138 noredirect 1 comment1
  • 如何禁用基于 ValidationRule 类的按钮?

    如何禁用基于 ValidationRule 类的 WPF 按钮 下面的代码可以很好地突出显示 TextBox
  • 使用 cmake 将两种解决方案合二为一

    我有两个单独的 Visual Studio 2013 解决方案 我想将它们迁移到一个解决方案中 因为第一个解决方案 使用 Qt 充当第二个解决方案的 GUI 最后 我希望有一个结构如下的单一解决方案 Solution All Build P
  • 在 C# 命令行应用程序中包含并执行 EXE

    所以我找到了一个很棒的小 EXE 命令行应用程序 我们将其称为 program exe 它输出一些我想用 C 操作的数据 我想知道是否有一种方法可以将program exe 打包 到我的Visual Studio项目文件中 这样我就可以将编
  • 调试错误:在 vc++ 项目中使用 COM 时发生 所需的运行时?

    我为我的工作创建了一个 COM 组件 我也注册了该组件 在我的系统上 我有两个虚拟机工作站 在我的第一个工作站中 它运行良好 在我的第二个工作站中 它显示一个包含消息的错误框该程序需要一段时间并以不寻常的方式关闭 请联系应用程序管理员 我认
  • 实体框架读取列但阻止其更新

    给定一个数据库表 其中有一列包含历史数据但不再填充 实体框架中是否有一种方法可以读取该列 但在使用相同的模型对象时防止它被更新 例如我有一个对象 public class MyObject public string CurrentData
  • 如果仅使用第一个元素,是否必须为整个结构分配内存?

    我有一个结构 其中第一个元素被测试 并且根据其值 结构的其余部分将被读取或不会被读取 在第一个元素的值指示结构的其余部分不会被读取的情况下 我是否必须为整个结构或仅第一个元素分配足够的内存 struct element int x int
  • 如何重用具有稍微不同的 ProcessStartInfo 实例的 Process 实例?

    我有以下开始的代码robocopy https technet microsoft com en us library cc733145 aspx as a Process 我还需要进行数据库查询以确定每次需要复制哪些目录robocopy被
  • 基础设施 - 同步和异步接口和实现? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在实现库 基础设施时 并且该 API 的用户希望同步和异步使用代码 我读到混合同步和异步并不是一个好主意 例如 同步实现包括等待异步实现 显然

随机推荐