一个C++可移植开源应用程序的最佳实践

8
我正在用C++开始一个开源跨平台项目。我的开发环境是Linux。可能会有其他开发人员从不同的平台进行开发。因此,我需要一些帮助来开始配置和设置开发环境,以便所有多个平台的开发人员都可以轻松地进行开发。
以下是我的问题:
1.编译器:我计划使用g++,听说它是跨平台的。这是一个好选择吗?
2.制作文件:我看到过Code::Blocks编辑器,并且它可以动态生成make文件,您不必手动编写。这是最佳实践还是我需要创建make文件?
3.在开发跨平台应用程序时还需要注意哪些其他设置?
有什么想法吗?
编辑
谢谢回答。还有一个问题。
您是手工创建makefile吗?还是有任何可以生成它的工具?

跨平台是指哪些平台?GUI 还是非 GUI? - Ryan Graham
一个部分将是共享库。当然,GUI也会在那里。 - Navaneeth K N
7个回答

7
你的项目最重要的是可移植性。它应该容易地为每个人构建和运行。
GCC (g++) 确实是首选编译器。它来自开源世界,因此被广泛采用。
然而,一个简单的 Makefile 是不够的。使用 CodeBlocks 或任何其他 IDE 生成它都有问题: 由于它们的平台,其他开发者可能不得不生成他们自己的,但不一定有 CodeBlocks 在手,或者只是不想使用它。
存在几种不同的跨平台构建系统,它们是 IDE 不可知的。其中一些创建 Makefiles,其他则不使用 make 而是自己构建。
  • 目前最广泛采用的构建系统是Autotools。然而,它很难学习,杂乱无章,总体来说很麻烦。
  • 在众多其他选择中,我推荐Waf。它已被几个较大的开源项目证明,XMMS2就是一个很好的例子(虽然不是非常流行的项目,但它有很多插件和构建平台,包括OS X和Windows)。虽然waf的应用范围不是非常广泛,但它旨在与源代码一起发布,并且易于设置。这是我的建议。

编辑:为了开始你的开源项目,我还推荐卡尔·福格尔(Karl Fogel)的this book(可在线阅读)。玩得开心!


3
GNU C++编译器是跨平台工作的相对不错的选择,但在Windows上只有一个相对较旧的版本(3.4)被本地支持。尽管正在努力将4.x系列移植到Windows上,但迄今为止它还没有准备好用于实际操作。
与其关注使用哪种编译器,我更愿意关注使用哪种语言。编写符合ANSI标准的C++代码将在很大程度上使您的代码具有跨平台性。尽可能将平台特定行为隐藏在一个好的工具包后面,例如Qt。
对于跨平台构建环境,这可能取决于您使用的工具包。 Qt具有相对良好的QMake。 CMake是另一个令人信服的选择。我会避免使用Autotools,因为它在UNIX以外的可移植性非常差 - 在Win32上使用Autotools通常是可怕的折磨。
最后,现在就开始在多个平台上工作吧。VMware在这方面是非常有价值的。让您的代码在Linux、FreeBSD和Windows上编译。如果您可以达到这三个目标,在将来移植到其他平台将变得非常容易。

2

根据具体的平台,Qt 可能是答案。特别是使用新许可证时。


Qt和qmake。我还建议它比CodeBlocks推广的wxWidgets更好。 - ypnos

2
  • 现在就开始在多个平台上构建:这样可以尽早发现问题。
  • 如果您只关心Linux和Mac OS X,那么g++应该就足够了。有各种IDE和构建系统可用。您可能需要考虑使用autotools来帮助进行配置支持。
  • 如果您想针对Windows,情况就会变得有点复杂。您可以使用cygwin和/或mingw,但有时可能会很复杂。各种项目使用跨平台构建和配置系统,如CMake来为他们处理许多问题。

1
编译器:我打算使用g++,听说它是跨平台的。这是个好选择吗?
是的,但是你要用哪个版本呢?你有没有已知问题列表,针对你要使用的版本?
Makefile:我看过Code::Blocks编辑器,它可以动态生成makefile,不需要手动编写。这是最佳实践吗?还是我需要创建makefile?
这是一个经典的选择。当项目变得更加复杂时,你可能需要微调它们。
开发跨平台应用程序时,还需要注意哪些设置?
每个主要平台都有g++/makefile端口。因此,一旦确保你没有使用任何特定于平台的API或结构,你就可以开始了。
那其他方面呢?
- 第三方库?确保你不会使用特定于平台的库。 - 许可证问题(你的代码和其他人的)。 - SCM

我在Ubuntu中使用软件包管理器安装了最新版本的G++。 - Navaneeth K N
我其实不需要知道,但你应该知道 :) 确保记下你正在使用的工具版本。这可以在未来几天节省很多麻烦。 - dirkgently

1

好的建议。我会获取一份副本。 - Navaneeth K N


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接