我们有一些开发人员从事非商业性活动(阅读:只是为了好玩) 跨平台的C ++项目。我们已经确定了我们需要的所有跨平台库。但是,我们的一些开发人员更喜欢使用Microsoft Visual C ++ 2008,而其他人更喜欢在GNU / Linux上使用Emacs编写代码。我们想知道我们所有人是否有可能在同一个代码库中同时或多或少地同时从两个环境中工作。最终,我们希望项目从一开始就在两个平台上进行干净的编译。
如果无法做到这一点,我们的任何开发人员都乐意切换到其他环境。我们都定期使用Linux和Windows并同时享受这两者,所以这不是试图教育一组开发者关于另一个平台的优点的问题。这是关于我们每个人都能够在我们最喜欢的环境中发展,但仍然在一个有趣的项目上合作。
要分享的任何建议或经验吗?
答案 0 :(得分:15)
使用CMake管理您的构建文件。
这将允许您设置一个存储库,其中包含一组文本文件。然后,每个开发人员都可以运行适当的cmake脚本来为他们的系统构建正确的构建环境(Visual Studio 2008/2005 / GNU C ++构建脚本/等)。
这里有很多优点:
答案 1 :(得分:12)
我已经完成了它并且看到它没有太多问题。
您需要尝试隔离不同平台的不同代码。此外,您还需要考虑目录结构。像
这样的东西基本上,您只想清楚地了解每个系统的特定内容以及常见的内容。
此外,单元测试将会非常重要,因为可能会有轻微的差异,并且您希望让Windows人员轻松运行一些测试以确保Linux代码按预期工作而另一种方式。
答案 2 :(得分:5)
在我上一家和现在的公司,我在混合的Linux和Windows开发团队工作,他们使用Subversion和Qt(它有一个非常简单和强大的构建系统“QMake”一起工作,它隐藏了所有不同的平台/编译器特定的构建环境 - 您只需为所有平台编写一个构建文件 - 非常简单!)。
而且:Qt几乎包含了你需要的一切:
所以Qt是一个功能齐全且非常可靠的环境 - 我用了10年。
并且:Qt无缝集成到IDE,如VC ++,Eclipse或提供自己的IDE“QtCreator”。
请参阅:http://www.trolltech.com + http://doc.trolltech.com
最诚挚的问候, 克里斯
答案 3 :(得分:4)
我有在Acronis工作的经验。我们使用相同的代码库来构建二进制文件(实际上是完全打包的安装程序),目标是Win32 / 64,Linux和OS X(以及一些其他更具异国情调的平台,例如EFI),每个人都在他们选择的IDE中工作。这里的技巧是避免编译器和IDE特定的解决方案,并使您的项目完全可以从干净的跨平台make文件构建。请注意,您可以很好地将任何make系统与VC ++一起使用,因此它不是问题(我们出于历史原因使用Watcom make,但我不建议使用它。)
您可以做的另一个技巧是添加一个make脚本,该脚本可以自动生成makefile中输入列表中的项目文件,适用于您使用的所有IDE(例如VS和Eclipse CDT)。这样,每个开发人员都会为自己生成这些东西,然后在IDE中打开这些项目进行编辑/构建/调试,但源存储库中只包含makefile。
确保代码可以编译为每个人都可能是一个问题,主要是因为VC ++在应用规则时通常比g ++更松懈(例如,它会让你将rvalue绑定到非const引用,尽管有一个警告)。如果使用处理警告编译为错误和最高警告级别(可能禁用了一些精心挑选的警告),您将主要避免这种情况。建立连续的滚动构建是另一种早期捕获方法。我们在Acronis中使用的另一种方法是让Windows构建环境中包含基于Cygwin的交叉编译工具,因此任何Windows开发人员都可以从他的框中进行针对Linux(具有相同的g ++版本和所有版本)的构建,并查看是否失败,验证他的更改将以g ++编译。
答案 4 :(得分:3)
我个人使用cmake / mingw32 / Qt4来满足我所有的C ++需求。 QtCreator是一个跨平台的IDE,它针对qt4编程进行了一些优化。
答案 5 :(得分:3)
我们正在开展跨平台项目。我们使用Emacs进行编码,使用SCons进行构建,使用Visual Studio 2008进行调试。这是我第一次使用Emacs + SCons,我必须说,一旦你弄清楚SConstruct和SConscripts是如何工作的,这非常非常好。
答案 6 :(得分:3)
我迟到了这个问题,这里有很多好的答案,但我没有看到任何人列举我遇到的所有问题(我在C ++中的大多数工作都是并且已经交叉了 - 平台),所以:
尽管如上所述:整体跨平台是相当可行的,并没有真正的理由来避免它。我的经验是,问题往往会偶尔出现问题,但是当他们这样做时,他们所花费的时间超过了相当多的时间。如果你已经编程了一段时间,虽然你不会发现那么不寻常。
答案 7 :(得分:2)
问题不是真正编辑C ++源文件,而是构建过程本身。 VS不使用与Linux开发通常相同的Makefile架构。一个激进的建议,但两个组实际上可以使用相同的C ++ IDE和构建过程 - 有关详细信息,请参阅Code::Blocks。
答案 8 :(得分:2)
这是可能的(我这样做是为了赚取我的每日钱:-))。
但是你必须记住操作系统提供的库中的差异,这可能非常烦人。 两个很好的解决方案是BOOST和QT。
两者都为您提供了与C lib和STL无法处理的有用内容的平台无关功能。
答案 9 :(得分:2)
我以两种方式做到了这一点:
我不能说我真的很喜欢CMake,但是跨平台工具肯定有它的优点。
通常,使用不同的编译器从前几行编译代码总是一个好主意,因为它有助于提高代码质量。
答案 10 :(得分:2)
对cmake的另一次投票 需要注意的一件事是,文件名是封闭的,但在Windows上不区分大小写。它们在大多数unix文件系统上都区分大小写。
这通常是#include
的问题例如。给定一个文件FooBar.h
#include "foobar.h" // works on Windows, fails on Linux.
答案 11 :(得分:1)
我同意这里的所有人建议使用cmake进行C ++中的跨平台开发。这是一个很好的工具。
我建议的另一件事是使用eclipse CDT作为开发环境。它可以在任何可以运行Java gcc并统一开发环境的地方使用。
我认为那是Alan Jackson强调单元测试。为此,您需要一些跨平台单元测试库。我在post时间读过有关C ++单元测试框架的内容。这有点过时但很周到。缺少一个也适用于两个平台的是googletest。
最后,如果你想在两个平台上自动运行这些测试,cmake还有另一个名为ctest的工具,非常适合这样做。
答案 12 :(得分:0)
查看premake ...它与CMake非常相似,但是使用lua编写。
我已经在许多开发项目中使用了它,并且发现它易于学习并集成到现有的公司和项目结构中。
试一试!