如何组合大型c ++项目的组件?

时间:2013-10-27 21:46:49

标签: c++ visual-studio project-management

我有一个关于如何管理具有许多组件的大型c ++项目的问题(我猜这是最好的术语)。出于所有意图和目的,我是一个初学者。我理解编译,头文件等的基础知识,但我从来没有真正做过比家庭作业更重要的事情。所以,让我们采取类似于具有各种组件的游戏引擎,如内存管理器,渲染器,物理模拟等。如何分别对这些组件起作用,但是这样可以很容易地将它们集成到整体中?例如,您是否会为每件作品创建一个单独的视觉工作室项目?如果你有一个大项目的一切,你将如何在一个组件上工作而没有潜在的另一个未完成的组件使它在每次编译时都失败?我觉得我错过了一些重要的概念。就像,对于有多个程序员必须检查部分工作的项目......他们是否抓取所有代码以便他们可以编译,或者他们是否设置了自己的临时项目来处理他们的工作?两种选择听起来都不对你必须有一个主函数来编译吗?

我非常感谢任何教育我这个主题的人,因为我觉得这是我应该拥有的,而且完全错过了。

3 个答案:

答案 0 :(得分:1)

当您使用较大的程序时,通常会有一个带有主程序的源文件,其余的(可能有很多源文件)是从main调用的。然后你需要一个构建策略。您可以编写一个脚本文件来编译每个源文件,然后将它们全部链接在一起。不幸的是,这会导致构建时间过长,因此专业程序员使用make文件只重建更改的文件。 作为进一步的改进,您可以将源组组织到库中并单独构建库,然后将它们与剩余的已编译源文件链接。

尝试查找gmake(用于linux)以了解如何构建更大的项目。我猜您使用的是Microsoft VC ++,在这种情况下,编译文件具有.obj扩展名和库.lib扩展名。微软有自己的构建库的方法,这比使用gmake简单得多。

当你进一步观察时,你会遇到共享库(Windows上的动态链接库 - DLL)。

答案 1 :(得分:0)

对于堆栈溢出格式,这不是一个很好的问题。 C ++确实支持用于管理大型代码库的语言工具,如命名空间,类和头文件。但是你的问题似乎表明缺乏对它们的用途的看法,或者对为软件项目贡献代码的技术框架和过程的有限理解。这不是c ++特定的问题。

在从事生活项目时,主要关注的是处理复杂性问题。换句话说,减少在任何一个时间点你必须考虑的事情的数量。这意味着如果另一个程序员正在使用用户界面,理想情况下,物理引擎中的代码不必更改以反映这些更改。因此,用于形成抽象和隐藏信息的界面是必不可少的。

当然,我也很绿,所以我不能给出任何真正可靠的建议。我只提到这一点,以便对你的问题有多模糊。如果我理解你的问题,你可能会喜欢像McConnell的Code Complete 2这样的书。

答案 2 :(得分:0)

大型项目分为几个部分。通常,您应该能够分别编译每个部分。我所知道的最佳实践是声明各个组件之间的接口,尽可能地将依赖性尽可能地降到零,然后构建“测试”程序,这些程序很小并且有两个原因:测试一小段代码,主要是()。 目录结构通常是:

yourlib/
  lib/
  ext-inc/
  test/
  other dirs/
  ...

lib包含输出库对象(.a,.so) ext-lib包含外部代码将使用的头文件(有时称为“public”或“inc”) 测试目录通常有一个main.c(cpp)文件,根据需要可能还有一些。

当你结帐(svn)/ clone(git)/ sync(p4)/等时,你会拿走所有东西,但只能在你所在地区工作。完成后,您将更改合并/提交到主分支。