4

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

/
  来源
    库1
      包括
        ...
      源代码
        ...
    库2
      包括
        ...
      源代码
        ...
    应用程序3
      包括
        ...
      源代码
        ...
  建设者
    制作
      ...
    制作
      ...
    VS2010
      vs2010.sln
      库1
        lib1.vcxproj
        lib1.vcxproj.filters
      库2
        lib2.vcxproj
        lib2.vcxproj.filters
      应用程序3
        应用程序3.vcxproj
        app3.vcxproj.filters

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

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

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

4

1 回答 1

8

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

在 CMake 文件中,您可以使用命令对文件进行分组source_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()
于 2013-04-13T17:06:45.787 回答