Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 大型跨平台软件项目的提示/资源_C++_Qt4_Cuda - Fatal编程技术网

C++ 大型跨平台软件项目的提示/资源

C++ 大型跨平台软件项目的提示/资源,c++,qt4,cuda,C++,Qt4,Cuda,我将开始一个大规模的软件项目,包括一个跨平台的GUI和大量的数字运算。我计划编写应用程序后端的大部分C++和CUDA,以及QT4中的GUI。我计划使用Make作为构建系统。这将是一个只有两个开发人员的项目,一旦我做得比较深入,可能最终会成为一个开源项目 我的主要问题是,是否有人有任何技巧/资源来开发软件背后的体系结构 什么是组织文件的好方法?(与gui代码不同,数字处理代码位于单独的文件夹中,gui代码与编译的可执行文件或其他文件是分开的?) 构建系统如何为跨平台软件工作?我是否需要为每个平台

我将开始一个大规模的软件项目,包括一个跨平台的GUI和大量的数字运算。我计划编写应用程序后端的大部分C++和CUDA,以及QT4中的GUI。我计划使用Make作为构建系统。这将是一个只有两个开发人员的项目,一旦我做得比较深入,可能最终会成为一个开源项目

我的主要问题是,是否有人有任何技巧/资源来开发软件背后的体系结构

  • 什么是组织文件的好方法?(与gui代码不同,数字处理代码位于单独的文件夹中,gui代码与编译的可执行文件或其他文件是分开的?)
  • 构建系统如何为跨平台软件工作?我是否需要为每个平台设置不同的构建系统,或者我是否可以创建一个公共的“makefile”,根据哪个平台调用它来构建不同的版本
  • 我需要对我的代码做什么样的修改,以确保它能在所有平台上正确构建(预处理器指令等)
  • 有人如何处理大型项目的修订控制,并将其集成到生成系统中,以便我获得版本号。修订号。生成号在每次生成项目时都会更新
我很沮丧,因为我即将毕业的学院几乎没有覆盖这一切。在这一点上,我已经做了很多谷歌搜索,但在我需要的东西上几乎没有运气。我不是要求什么都被填鸭式地喂饱,我会非常满意与此相关的书籍或网站的链接

我已经分别完成了大部分工作,但我从来没有尝试过将所有内容合并到一个大的包中

有人推荐我要查询的内容吗?

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

2) 我想看看cmake()如何跨多个平台管理建筑。这会给你带来很多痛苦

3) 尽可能多地使用STL和Boost。这些库的设计考虑到了这个问题。这将涵盖你可能需要做的大部分事情。您已经选择了优秀的Qt库,因此您的GUI也不是问题。把这三个因素结合起来,你已经走到了最前面。也就是说,您可能必须做一些平台独立的事情,而这些都不包括在内。为此,我建议您编写一个类,该类在所有平台上公开一致的接口,并在源文件中使用预处理器指令隐藏其本质。必须公开一致的接口

4) 使用SVN。我不知道如何在其他编译器上实现这一点,但在VisualStudio中,获取最新版本并将其插入到某个文件中,然后将其包含在项目中是很简单的。您可以使用生成事件来执行此操作。对不起,我不能在其他平台上详细说明

此外,如果您必须离开STL、Boost、Qt等平台,请注意所有平台上API调用的文档。在过去,我一直被
fseek()
API调用的行为所困扰,该调用在一个实现上写入字节以填充到目标,而在另一个实现上则不然。这些可能是令人头痛的主要原因,也是尝试并坚持使用上述经过测试的库的另一个原因。

将符合您的要求,我认为。。我将与
Qt
通信回答

关于文件的结构,您可以将源文件
*.cpp
*.h
放在文件夹中,其余的库和依赖项放在其他文件夹中。您可以使用Qt designer创建
*.ui
文件,也可以直接对其进行编码。(后者将大大增加编译时间)生成的文件(如
*.exe
*.obj
等)可以放在单独的文件夹中,这样文件系统看起来就一致了。在
Qt
中,有一些简单的方法可以实现上述所有功能。在这里结账

关于可移植性,您可以轻松地跨各种平台移植
Qt
应用程序。退房

关于源代码管理,我习惯于
SVN
,我们对此很满意。只要选择一个满足你需要的

由于您即将毕业,
Qt
与其他人相比显然有一些优势

  • 从我提供给你的链接中, 你本可以理解
    Qt
    的文档非常丰富 你不用花太多时间就可以完成它 专业支持
  • 而且最重要的是,Qt在,你可以免费玩…:)
    HTH..

    关于库的一些技巧:(A)尝试获取尽可能多的库源代码,而不是二进制文件,(b)将所有库的相关设置文件检查到存储库中,(c)为每个库/平台组合编写非常仔细的构建说明,以便在构建过程中不涉及猜测。另外,要特别小心,避免硬编码路径或依赖计算机系统目录中的DLL等。目标是使其在计算机之间完全可移植。如果使用CMake(正如Moo Juice所建议的),这将使生活更加轻松,因为它将在每个平台上为您生成适当的Makefile/visualstudio解决方案。你不想在每个平台上维护一个单独的Makefile——这很痛苦:)我想支持CMake的建议——它非常好,而且是一个比makeimho更好的选择。这是一个学习曲线(我最初被推迟了),但非常值得提前投资。