-1

我有一个关于应该如何管理具有许多组件的大型 c++ 项目的问题(我想这是最好的术语)。出于所有意图和目的,我是一名初级程序员。我了解编译、头文件等的基础知识,但我从未真正从事过比家庭作业更大的工作。因此,让我们以一个游戏引擎为例,它具有各种组件,如内存管理器、渲染器、物理模拟等。如何单独处理这些组件,但以一种易于集成回整体的方式?例如,您是否会为每个具有自己主要功能的作品制作一个单独的 Visual Studio 项目?如果您对所有事情都有一个大项目,您将如何处理一个组件而没有另一个未完成的组件导致每次编译都失败?我觉得我 我错过了一些主要的概念。就像,对于有多个程序员必须检查部分工作的项目......他们是否获取所有代码以便他们可以编译,或者他们是否建立自己的临时项目来工作?这两个选项听起来都是错误的。你必须有一个 main 函数来编译对吗?

我非常感谢任何人在这个话题上教育我,因为我觉得这是我应该拥有的东西,只是不知何故完全错过了。

4

3 回答 3

1

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

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

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

于 2013-10-27T22:00:45.610 回答
0

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

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

当然,我也很绿,所以我不能给出任何真正可靠的建议。我只提到这一点是为了说明您的问题有多模糊。如果我正确理解了您的问题,您可能会喜欢 McConnell 的 Code Complete 2 之类的书。

于 2013-10-27T22:15:02.713 回答
0

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

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

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

当您结帐(svn)/克隆(git)/同步(p4)/等时,您会带走所有东西,但只能在您所在的区域工作。完成后,您将更改合并/提交到主分支。

于 2013-10-27T22:18:18.180 回答