将 Visual Studio C++ 移植到 Linux

Posted

技术标签:

【中文标题】将 Visual Studio C++ 移植到 Linux【英文标题】:Port Visual Studio C++ to Linux 【发布时间】:2010-07-21 09:57:54 【问题描述】:

我们有一个不是很复杂但(即很多文件)Visual Studio C++ Win32 控制台,用 VS2010 中的 C++0x 标准编写。 它不使用任何非标准代码或任何东西(希望如此!)。

我现在想将它移植到 Linux。 哪种方法是最快的方法? 自动配置? 老式的make文件? 还有其他解决方案吗?

【问题讨论】:

我错过了什么吗?我上次听说 C++0x 是一个提议的标准,这意味着如果您的代码是使用其中的特性编写的,那么它非标准的。 实际上 C++0x 是 C++ 编程语言计划中的新标准的非官方名称。 计划的提议的是否意味着批准状态有任何不同?在成为标准之前,我对编写任何代码都持谨慎态度。 现在几乎是标准的了,因为所有流行的编译器都已经支持它了。 @Amardeep:VS2010 中的所有功能都已完成,即没有重大更改(只是错误修复和次要附录)。 GCC for Linux 支持更多。这里的C++0x没有问题。 【参考方案1】:

我会使用常规 make,但尽可能使用默认规则使其简单。继续添加依赖项。

编辑:在中间步骤中,使用 mingw 构建它,这样您就可以避免整个 API 移植问题,直到您的新构建机制中的构建工作正常。

如果您的控制台应用程序调用 win32 API 函数,那么您可以选择修改使用它的所有源代码或编写实现这些函数的模块。

在之前的这种类型的移植工作中,我尝试了两种方式,后者更容易。我最终只写了大约 18 到 20 个 shim 函数。

它非常成功,我最终编写了一个操作系统抽象层,该层用于许多项目,只需对一两个文件进行细微更改即可在 Windows 本机、cygwin、Linux、VxWorks 等上进行编译。

(p.s. 对基于 C++ 的操作系统抽象层的开源版本有兴趣吗?如果有足够的兴趣,我正在考虑向全世界发布一个不受阻碍的版本。它在 BOOST 太重的情况下最有用 - 即嵌入式项目。)

【讨论】:

【参考方案2】:

很可能您不需要 autoconf(我建议您不要碰它,unless you love pain),因为您不想移植到十几种 Unix 风格。

    手动滚动您的 Makefile。如果您有一组共享规则并且只有最少的 Makefiles 只指定源文件和编译选项,这应该不会太难。 使用 GCC 4.5 作为it supports more C++0x features。

【讨论】:

【参考方案3】:

您可以从 Visual Studio 中导出 make 文件。

更新:实际上你不能再这样了,除非你身边有 VC6

【讨论】:

我不关心 VS 或 C++,但对于吸引人的头像 +1 ;)【参考方案4】:

远离自动*并进行配置。这些都是可怕的恕我直言。

如果你能以某种方式获得 VS 8 或 9 vcproj/sln,你可以使用this。没用过,不能给点建议。

如果您要进行手动转换,我建议您使用 CMake 之类的工具,因为它很容易足够快地准备好,即使对于大型项目也是如此。

如果项目有一个简单的布局,你可以像这样使用 Qt 4 的 qmake 成功:

qmake -project

它会输出一个 qmake .pro 文件,该文件可以在许多平台上转换成一个 makefile(使用 qmake)。这应该可以正常工作,但并不完美。或者,您可以为 VS 安装 Qt 插件,并让它从现有的 VS 项目生成 pro 文件。它会让你的构建系统依赖于 Qt4 的 qmake,这可能不是你想要的。

当然还有其他类似cmake的东西,但都需要人工干预。

【讨论】:

【参考方案5】:

最快的方法?

g++ *.cpp -o myapp

说真的,根据您的需要,即使生成一个 makefile 也可能是矫枉过正。如果您只是对快速而肮脏的“让我们看看我们是否可以在 Linux 上获得一个工作程序”感兴趣,只需将您的代码文件扔到 g++ 上看看会发生什么。

【讨论】:

以上是关于将 Visual Studio C++ 移植到 Linux的主要内容,如果未能解决你的问题,请参考以下文章

将 Visual Studio C++ 项目“移植”到 Linux 上编译的最简单方法是啥?

将 Android 应用程序从 Android Studio 移植到 Microsoft Visual Studio

将 std::wstring 从 Visual Studio 移植到 mingw gcc

为啥 Visual Studio 2008 在 C++ 代码中突出显示 internal 作为关键字?

如何用visual studio2012编c++程序?

如何在 Visual Studio Express 2013(C++) 中获取特定驱动器的当前目录?