草庐IT

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

coder 2024-02-05 原文

我将开始一个涉及跨平台 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++ - 大型跨平台软件项目的技巧/资源的更多相关文章

  1. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  2. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  3. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  4. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

  5. ruby - 安装 Ruby 时遇到问题(无法下载资源 "readline--patch") - 2

    当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub

  6. Ruby 从大范围中获取第 n 个项目 - 2

    假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit

  7. ruby-on-rails - Rails 3,嵌套资源,没有路由匹配 [PUT] - 2

    我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle

  8. ruby - 使用 `+=` 和 `send` 方法 - 2

    如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:

  9. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  10. 动漫制作技巧如何制作动漫视频 - 2

    动漫制作技巧是很多新人想了解的问题,今天小编就来解答与大家分享一下动漫制作流程,为了帮助有兴趣的同学理解,大多数人会选择动漫培训机构,那么今天小编就带大家来看看动漫制作要掌握哪些技巧?一、动漫作品首先完成草图设计和原型制作。设计草图要有目的、有对象、有步骤、要形象、要简单、符合实际。设计图要一致性,以保证制作的顺利进行。二、原型制作是根据设计图纸和制作材料,可以是手绘也可以是3d软件创建。在此步骤中,要注意的问题是色彩和平面布局。三、动漫制作制作完成后,加工成型。完成不同的表现形式后,就要对设计稿进行加工处理,使加工的难易度降低,并得到一些基本准确的概念,以便于后续的大样、准确的尺寸制定。四、

随机推荐