我正在开发一组复杂的 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(使用前将#替换为@)