Visual Studio 2010项目文件过滤器

Visual Studio 2010 project file filters

本文关键字:过滤器 项目文件 2010 Studio Visual      更新时间:2023-10-16

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

<>之前/来源lib1包括…src…lib2包括…src…app3包括…src…建筑商cmake…使…VS2010vs2010.slnlib1lib1.vcxprojlib1.vcxproj.filterslib2lib2.vcxprojlib2.vcxproj.filtersapp3app3.vcxprojapp3.vcxproj.filters之前

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

现在的问题是……当涉及到在过滤器中组织include/sources文件时,VS2010是完全不可用的。你必须手动重复做"添加->新过滤器",然后是"添加->退出项目"。我有一个非常复杂的文件夹结构和文件在每个包含文件夹。创建过滤器的任务变成了一整天的工作。另一方面,我可以把整个文件夹从资源管理器拖到VS2010的项目中,但它会把所有的头文件/源文件都放在那里,没有任何过滤器,使它毫无价值:你不可能在100个文件中搜索正确的一个,没有某种层次结构。

问题是:VS2010是否有一些模糊的方式导入文件夹并保留文件夹结构作为过滤器?在我看来,创建VS2010的M$FT的人认为M$FT是丛林中唯一的动物,你必须用构建器项目污染源文件夹,这样你就可以利用"显示隐藏文件"将它们连同文件夹结构一起包含在项目中。

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

在CMake文件中,您可以使用命令source_group对文件进行分组。过滤器将根据源组自动为vs生成。我不知道其他IDE,如Code::Blocks或NetBeans。

如果你想根据文件路径自动分组[Comment request]:

# 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()