12

我的源文件窗格正在快速增长(就我项目中的文件数量而言),并且在任何给定时间快速找到我需要访问的特定源文件变得有点麻烦。我正在使用 Embarcadero 的 C++Builder,但我在其他 C++ IDE 中也遇​​到过这个问题。

在 Java 中,我经常使用包来创建源代码的逻辑划分,尤其是在处理单个项目中的大量源文件时。当然,这不是 Java 包的唯一用途,但它们在这方面非常方便。

有人对我如何在 C++ 中实现类似功能有任何想法吗?我应该将源文件分成物理文件夹吗?C++Builder 是否提供了某种我没有看到的虚拟文件夹/分组功能?任何想法表示赞赏,谢谢。

4

3 回答 3

13

我通常建议不要(仅)使用 IDE 或语言语法来组织源代码。一方面,您将自己与环境联系在一起:在 IDE 中组织良好,文件无组织,然后有一天您可能想要使用不同的环境......

正因为如此,我通常同时使用这三种方式来组织我的源代码:我将我的源代码分成功能模块,即相关的类。每个模块都有自己的命名空间、物理文件夹和 IDE 文件夹。(在我的情况下,如果需要,使用CMakesource_group()生成 IDE 项目文件——个人更喜欢命令行、Vim 和“make”。)

因此,无论我是从 IDE、命令行还是编译器日志中查看项目,foo/some_class.hpp 是 foo/some_class.cpp 是 foo::some_class,从而最大限度地减少混乱。

实际上,我目前首选的设置将每个模块目录进一步细分为<project>/<module>/<class>.hpp<project>/<module>/src/<class>.hpp取决于该类是否在其自己的模块之外使用<project>/<module>/src/<class>.cpp,和<project>/<module>/test/<class>_tu.cpp. 命名空间<project>::<module>::<class>当然是 。

project
|-- foo
|   |-- some_class.hpp
|   |-- src
|   |   |-- internal_class.hpp
|   |   |-- internal_class.cpp
|   |   `-- some_class.cpp
|   `-- test
|       |-- internal_class_tu.cpp
|       `-- some_class_tu.cpp
|-- bar
|   |-- ...

这里的想法是每个模块(foo)的“外部”接口由该子文件夹中的标题记录,实现细节和测试“隐藏”在相应的子文件夹中。

但最终,这在很大程度上取决于——你的品味、你的合作开发者的品味以及你的项目范围。

于 2013-04-22T16:04:18.380 回答
12

这是我的风格:

PROJECT_NAME
|-- build // This is DVCS ignored but has all the built intermediates and final binaries
|   |-- release // These are the different build profiles
|   |-- debug
|   |-- profile
|   `-- coverage
|-- bin // For binary source code
|   `-- hello_world
|       |-- doc
|       |-- inc
|       |-- src
|       |-- tests
|       `-- build_script  // Builds binary into the build folder
|-- include // Public headers for the library
|   `-- these
|       `-- folders
|           `-- represent
|               `-- namespaces
|                   `-- my_awesome_class.hpp
|-- lib // library source code
|   |-- these
|   |   `-- folders
|   |       `-- represent
|   |           `-- namespaces
|   |               |-- inc // Private headers
|   |               |   `-- my_private_class.hpp // internal class
|   |               |-- src // Source code for this namespace
|   |               |   |-- posix
|   |               |   |   `-- my_awesome_class.cpp // posix specific source code
|   |               |   |-- nt
|   |               |   |   `-- my_awesome_class.cpp // nt specific source code
|   |               |   |-- my_private_class.cpp // non-visibile class
|   |               |   `-- my_awesome_class.cpp // cross platform source code
|   |               |-- tests // Unit tests
|   |               |   `-- my_awesome_class.cpp // builds a test executable for the library
|   |               `-- doc // Documentation for this namespace
|   |                   `-- namespace.dox
|   `-- build_script  // Builds binary into the build folder
|-- doc // Documentation files
|   |-- main_page.dox
|   `-- namespace.dox
`-- build_script  // Builds the source code into the build folder

这表示these::folders::represent::namespaces::MyAwesomeClass具有特定源代码(以及通用源代码)的类以及库内部使用的私有posix,标头不是公共的,并且类符号的可见性是隐藏的。NTthese::folders::represent::namespaces::MyPrivateClass

这已经很好地扩展并提供了轻松定位文件。

于 2013-04-22T16:25:47.150 回答
0

我制作项目是为了让我的所有文件都易于访问。这是最简单的组织方式,以及清晰的类/文件名。

于 2013-04-22T15:53:33.687 回答