【问题标题】:Organizing source (C++)组织源代码 (C++)
【发布时间】:2012-10-16 20:53:50
【问题描述】:

对于一个科学项目,我有一个模板化分析工具(模块 A),它使用一种统计测试(模块 B)。分析工具(模块 A)用于解决两种类型的问题(模块 C 和 D)。模块 C 和 D 定义了用于从不同文件类型进行序列化的函数。

所有模块(A、B、C 和 D)都使用通用实用程序(模块 E)。每个模块由几个文件组成。我真的很想组织模块,使每个模块都有自己的命名空间,因此源文件位于不同的目录中(即强调组织中的模块化)。

在每个文件中定义命名空间很简单。但我希望使用某种源代码树,其中每个模块的#include 文件将在其自己的命名空间中包含所有其他文件。

我不太确定组织这个的好方法。我应该只使用每个模块一个文件夹并使用相对路径#include 吗?每个模块是否应该有自己的 git 存储库,并编译成单个库文件,该文件位于指定的 UNIX 文件夹中(这需要真正安装才能运行项目)。

现在我正在使用 gcc-4.7、make 和 emacs。

您知道组织这些文件以实现模块化的方法吗?

请原谅我并建议是否有其他更适合此问题的 StackOverflow 附属机构。我的项目运行了,但它比它需要的要混乱得多!

【问题讨论】:

  • 我认为programmers.se 是更适合您的问题的平台
  • 库文件不需要放在系统文件夹中。你可以把它们放在你喜欢的任何地方,你只需要确保路径包含在LD_LIBRARY_PATH中。

标签: c++ code-organization project-organization


【解决方案1】:

但我希望使用某种源代码树,其中每个模块的#include 文件将在其自己的命名空间中包含所有其他文件。

这是错误的方法。即使 A 在模块级别依赖于 E,也不一定意味着 A 中的所有组件都依赖于 E 中的所有组件,您不应该通过包含来强制这样做。

包含应该是明确的(包括你真正需要的一切)和精确的(不要包括你不依赖的任何东西)。

话虽如此,我会将代码组织在模块中,每个模块都有一个单独的目录。如果一个模块变得复杂到需要拆分为子模块,那么您可以添加嵌套目录,但单个两级层次结构就足够了。

【讨论】:

  • 谢谢,这是一个很好的观点(并且可能会使我所有的模板头减慢编译速度)。您会简单地将它们放在并行目录和#include "../B/file.h" 中吗?
  • 还有一件事——如果模块中的所有文件对于模块来说都是必需的呢?
  • @Oliver:我会将它们放在单独的目录中。然后是“#include ”或普通的“#include ”,并指示编译器在哪里找到头文件。关于“另一件事”:要么它们都是单个组件的一部分,因此它们位于单个标头中,要么它们位于不同的标头中,用户应按需包含。
猜你喜欢
  • 2011-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多