2010-09-24 80 views
7

我开始了一个C++项目,我想在Eclipse(Linux)和vs2010中从同一个存储库同样编译好,并且可以使用一些帮助入门。尽管许多方面都可以单独使用Google,但我一直希望就如何解决整体问题提供建议。例如,在哪里保存图书馆资源,如何构建make文件,以及如何整合googletest(单独在googletest上找到新手教程很难)。指向这些方面的教程的链接将非常棒,或者一系列教程可以帮助您。跨平台C++项目入门

我的背景是在C#中,我试图维护VS项目的“清洁”和组织。

+0

您是指Windows上的VS2010与Linux上的Eclipse之间的兼容性? Eclipse本身就是一个非常多平台的IDE。 – Reinderien 2010-09-24 15:50:56

+0

是的,谢谢你的提问。 Eclipse正在Linux上运行(OpenSuse 11.3) – ccook 2010-09-24 15:53:01

回答

13

我已经完成了在两个平台上使用“native”构建系统的跨平台项目(windows上的vsproj文件和linux上的makefile),但维护这两个项目文件确实很痛苦。所以,是的,我同意其他建议,您应该尝试从一个可靠的跨平台构建实用程序开始。 CMake或可能Boost build看起来像不错的选择 - 可能还有很多其他的。

当涉及到第三方库时,您会想要坚持那些经过严格跨平台测试的东西。 Boost是最好的C++通用库(是的,你看到它在几乎所有的C++线程中都提到过......但那是因为它真的是是一个很好的有用的东西集合)。至于XML,HTTP,图片库,用户界面 - 这里有所有良好的跨平台选项 - 只要环顾四周或询问是否有特定要求即可。无论你做什么,都不要使用CodeProject或其他面向MS的网站的一些库,这些网站只能用Visual Studio 6进行测试 - 这只会导致不幸。这些天大部分的GNU库都建立在Windows上,所以你应该对这些东西合理安全。

尽管它很诱人,但尽量在代码中尽量减少平台#ifdefs - 而不是尽可能地抽象库中任何平台特定的东西。

祝你好运!

+0

希望我可以做出多个upvote – Tim 2010-09-24 16:18:55

+0

关于'#ifdef与单独的库 - 将常用代码放入一个库中的基类并非不合理,然后扩展类来分离平台特定的子类,这些子类使用多态性来改变特定于平台的行为。然后,唯一需要的#ifdef是管理使用哪个子类。 – Reinderien 2010-09-24 16:20:39

+0

关于ifdef /独立库,您还可以拥有一个通用头文件,然后将源文件与共享cpp中的某些源以及仅在适当系统上构建的特定于平台的文件中的一些源分开。 – 2010-09-24 17:30:39

4

有一件事我可以建议,如果你要强力跨平台,并且希望所有事情尽可能“干净”:使用像Scons这样的现代跨平台构建工具来集中构建系统。它是用Python编写的,它非常简洁而且功能强大,并且它可以在任何地方使用。或者,如果您是Eclipse的粉丝,只需在Windows和GNU/Linux上安装Eclipse即可。正如我上面提到的那样,它是跨平台的,你可以在各种不同的系统上为编译器工作。

+0

它看起来很有前途,但实现起来会有多困难?我只是把自己包裹起来 – ccook 2010-09-24 15:56:43

+3

在我的愚见中,让语法非常哈克。如果你了解它的历史,它永远不会成为一个公共的,大规模的构建解决方案。难以扩展,难以维护并且人类可解析性很差。只要看看在混淆(automake和他们的亲属)之上堆砌混淆的工具的数量。另一方面,Scons简直就是Python,并且有大量实例记录。 – Reinderien 2010-09-24 16:11:06

+0

@ccook:SCons更加自动化,并且由于您拥有python的全部功能,您可以使用'glob.glob'和'os。listdir'来获取目录中的文件列表,从而避免维护文件列表... – 2010-09-24 16:11:57