c++ - 大型跨平台软件项目的技巧/资源

标签 c++ qt4 cuda

我将开始一个涉及跨平台 GUI 和大量数字运算的大型软件项目。我计划用 C++ 和 CUDA 编写大部分应用程序后端,并在 Qt4 中编写 GUI。我计划使用 Make 作为我的构建系统。这将是一个只有两名开发人员的项目,一旦我对它进行了相对深入的研究,它可能最终会成为一个开源项目。

我的主要问题是,是否有人有任何关于开发软件背后架构的技巧/资源。

  • 组织文件的好方法是什么? (与 gui 代码不同的文件夹中的数字运算代码,与已编译的可执行文件或其他东西分开?)
  • 构建系统如何为跨平台软件工作?我是否需要为每个平台设置不同的构建系统,或者我是否可以创建一个通用的“makefile”,根据调用它的平台进行不同的构建?
  • 我需要对我的代码进行哪些类型的修改以确保它能够在所有平台上正确构建(预处理器指令等...)?
  • 如何处理大型项目的版本控制并将其集成到构建系统中,以便我每次构建项目时都能获得更新的 Version.Revision.Build 编号?

令我沮丧的是,我即将毕业的大学几乎没有涵盖这些内容。在这一点上,我已经做了很多谷歌搜索,但对我需要的东西运气不佳。我并不是要求什么都被填满,我会非常满意与此相关的书籍或网站的链接。

我已经分别完成了大部分这些事情,但我从未尝试将所有事情组合成一个大包。

有没有人推荐Release It!: Design and Deploy Production-Ready Software我在询问什么?

最佳答案

1) 结构可以相同,但如果您在子目录中包含文件,请确保使用 '/ 而不是 \。前者也适用于 Windows。

2) 我会检查 cmake ( http://www.cmake.org/ ) 以管理跨多个平台的构建。这将为您减轻很多痛苦。

3) 尽可能多地使用 STL 和 Boost。这些库在设计时就考虑到了这个问题。这将涵盖您可能需要做的大部分工作。您已经选择了出色的 Qt 库,因此您的 GUI 也不是问题。结合这 3 个,您已经完成了大部分工作。也就是说,您可能必须做一些独立于平台且不在其中任何一项范围内的事情。为此,我建议您编写一个在所有平台上公开一致接口(interface)的类,并在源文件中隐藏带有预处理器指令的细节。必须公开一致的接口(interface)。

4) 使用 SVN。我不知道如何在其他编译器上执行此操作,但在 Visual Studio 中获取最新修订版并将其插入到某个文件然后包含在您的项目中是微不足道的。您可以使用构建事件来执行此操作。抱歉,我无法详细说明其他平台。

此外,如果您不得不转向 STL、Boost、Qt 等之外的领域,请注意所有平台上 API 调用的文档。我过去曾被 fseek() API 调用的行为所困扰,该 API 调用写入字节以填充到一个实现的目标,但不是另一个。这些可能是令人头疼的主要原因,也是尝试并坚持使用上面提到的久经考验的库的另一个原因。

关于c++ - 大型跨平台软件项目的技巧/资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4180242/

相关文章:

c++ - 将拜耳图像分离到颜色 channel C++

C++:类型转换运算符重载 - Visual Studio 2013 内部错误

QtSQL + Sqlite 并支持 .size() 函数?

CUDA流不重叠

c++ - `cudaEventDestroy` 异步启动返回错误码时如何正确响应?

c++ - 在函数 C++ 中调用模板函数

c++ - 使用 QString 作为键的 QHash 查找速度

linux - QtMultimedia 无法在 linux 上播放音频 : GStreamer; Unable to play - ""

c++ - OpenCV 3.0 上的 GPU 功能在哪里?

c++ - Direct9.0 窗口(全屏运行时)