Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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++;Linux和Windows的开发_C++_Cross Platform - Fatal编程技术网

C++ 同时C++;Linux和Windows的开发

C++ 同时C++;Linux和Windows的开发,c++,cross-platform,C++,Cross Platform,我们有几个开发人员正在开发一个非商业的(阅读:只是为了好玩) 跨平台C++项目。我们已经确定了我们需要的所有跨平台库。然而,我们的一些开发人员更喜欢使用微软Visual C++ 2008,其他人更喜欢在GNU/Linux上的Emacs中编码。我们想知道我们是否有可能从同一个代码库中同时在两个环境中工作。最终,我们希望项目从一开始就在两个平台上干净地编译 如果不可能,我们的任何开发人员都乐意切换到其他环境。我们都经常使用Linux和Windows,并且都喜欢这两种平台,所以这不是试图让一组开发人员

我们有几个开发人员正在开发一个非商业的(阅读:只是为了好玩) 跨平台C++项目。我们已经确定了我们需要的所有跨平台库。然而,我们的一些开发人员更喜欢使用微软Visual C++ 2008,其他人更喜欢在GNU/Linux上的Emacs中编码。我们想知道我们是否有可能从同一个代码库中同时在两个环境中工作。最终,我们希望项目从一开始就在两个平台上干净地编译

如果不可能,我们的任何开发人员都乐意切换到其他环境。我们都经常使用Linux和Windows,并且都喜欢这两种平台,所以这不是试图让一组开发人员了解另一个平台的优点的问题。这是关于我们每个人都能够在我们最喜欢的环境中进行开发,但仍然能够在一个有趣的项目上进行协作

有什么建议或经验可以分享吗?

用于管理生成文件

这将允许您设置单个存储库,其中包含一组文本文件。每个DEV都可以运行适当的CuScript脚本来为系统构建正确的构建环境(VisualStudio3/GNU C++ +构建脚本/等)。 这里有很多优点:

  • 每个开发人员都可以使用自己的构建环境
  • 可以非常干净地处理依赖关系,包括特定于平台的DEP
  • 生成可以是源代码外的,这有助于防止意外提交不适当的文件
  • 轻松迁移到新的开发环境(即:当VS2010发布时,一些开发人员只需重建其构建文件夹即可迁移到新的开发环境)

  • <>问题不是真正编辑C++源文件,而是编译过程本身。VS不像Linux开发那样使用相同的Makefile体系结构。一个激进的建议,但是两组都可以使用同一个C++ IDE和构建过程-查看更多信息。

    < P>这是可能的(我这样做是为了赚取我每天的钱:-) 但是,您必须记住操作系统提供的库中的差异,这可能非常烦人。 两个很好的选择是BOOST和QT


    为您提供与平台无关的功能,这些功能不被C LIB和STL处理。

    < P>我个人使用CGED/MIW32/QT4来满足我的所有C++需求。
    QtCreator是一个跨平台IDE,它在某种程度上针对qt4编程进行了优化。

    我已经完成了,并且看到它在没有太多问题的情况下完成了

    您将需要尝试隔离不同平台的不同代码。此外,您还需要考虑您的目录结构。差不多


    • project/src我通过两种方式完成了这项工作:

    • 每个平台都有自己的构建系统。每当有人更改某些内容(添加源文件)时,他们要么也修改其他平台,要么发送通知,让更熟悉其他平台的人相应地修改
    • 使用 我不能说我真的喜欢CMake,但跨平台工具肯定有它的优势


      通常,使用不同的编译器从最开始的几行编译代码总是一个好主意,因为它有助于提高代码质量

      我在Acronis有过这样的工作经验。我们使用相同的代码库构建针对Win32/64、Linux和OS X(以及其他一些更奇特的平台,如EFI)的二进制文件(实际上是完全打包的安装程序),每个人都使用自己选择的IDE。这里的诀窍是避免编译器和IDE特定的解决方案,并使您的项目完全可以从干净的跨平台make文件构建。请注意,您可以很好地将任何make系统与VC++结合使用,因此这不是一个问题(出于历史原因,我们使用了Watcom make,但我不推荐它)

      您可以使用的另一个技巧是添加一个make脚本,该脚本自动从makefile中的输入列表生成项目文件,用于您使用的所有ide(例如VS和eclipsecdt)。这样,每个开发人员都会为自己生成这些内容,然后在IDE中打开这些项目进行编辑/构建/调试,但源存储库中只有makefile


      确保每个人都可以编译代码可能是一个问题,这主要是因为VC++在应用规则方面通常比g++更宽松(例如,它可以让您将右值绑定到非常量引用,尽管有警告)。如果编译时将警告视为错误,并使用最高警告级别(可能禁用了一些手动选择的警告),则基本上可以避免这种情况。设置连续的滚动构建是另一种提前捕获这些信息的方法。我们在Acronis中使用的另一种方法是让Windows构建环境中有基于Cygwin的交叉编译工具,这样任何Windows开发人员都可以从自己的框中针对Linux(使用相同的g++版本和所有版本)进行构建,看看这是否失败,以验证他的更改将在g++中编译。

      如前几篇文章所述,Qt是一种非常简单的方法,可以进行真正的同步多平台开发,它独立于IDE,并使用许多不同的编译器(甚至对于Symbian、ARM、Windows CE/Mobile…)

      在我上一个和现在的公司,我在Linux和Windows混合开发团队中工作,他们使用Subversion和Qt(它有一个非常简单和强大的构建系统“QMake”,它隐藏了所有不同的平台/编译器特定的构建环境-您只需为所有平台编写一个构建文件-非常简单!)

      而且:Qt几乎包含您需要的所有内容:

      • 简单的字符串处理,具有简单的翻译支持和简单的字符串转换(utf8、utf16、asci…)
      • 用于文件i/o、图像、网络等的简单类
      • 舒适的gui类
      • 用于gui布局/设计的图形设计器
      • 图形翻译
         #include "foobar.h" // works on Windows, fails on Linux.