将 GNU C++ 程序移植到 Visual C++

Posted

技术标签:

【中文标题】将 GNU C++ 程序移植到 Visual C++【英文标题】:Port GNU C++ programs to Visual C++ 【发布时间】:2010-10-13 20:13:33 【问题描述】:

如何将具有 Linux 中 GNU C++ 生成文件的 C++ 程序移植到 Visual C++?

【问题讨论】:

你考虑过cygwin和MinGW吗? 【参考方案1】:

CMake 擅长生成 Visual Studio 项目。

如果您不需要,我建议使用 Meson 构建系统。更好,类似的建议。需要 python3 和 ninja,但没有人是完美的。 :)

【讨论】:

【参考方案2】:

提到了 CMake。我已经使用 CMake 并成功编译了生成的 Visual Studio 项目。我发现 CMake 文档非常无用——我不得不询问现有用户——而官方手册(需要花钱)当时已经绝版。此外,它生成的 Visual Studio 项目根据编写转换器的人首选的模板进行了非常严格的格式设置。我无法弄清楚如何自定义项目选项或对源文件进行分组。

我经常在 Visual Studio 和 G++ 上进行交叉编译。在大多数情况下,您只需将所有源文件和头文件添加到 Visual Studio 项目中(“添加现有文件”,并添加整个源代码树),然后编译它。通常你会得到错误,所以你从那里开始修复错误。如果您使用特定于平台的库,您可能会在移植到替代或删除功能时遇到困难。

再提醒一句:Visual Studio 和 G++ 有不同的编译器怪癖。在大多数情况下,它们都非常符合 C++ 标准,但在其中一个工作的稍微偏离标准的代码可能在另一个工作不工作。我发现在处理模板时尤其如此,Visual Studio 在许多情况下都允许出现语法错误。

【讨论】:

【参考方案3】:

移植构建系统:您可以使用 GNU make 的 Windows 端口,并更改 makefile 以调用 Visual C++ 命令行工具(cl.exelink.exelib.exe、等)在 Windows 上构建时,在 Linux 上构建时使用 GNU 编译器工具。这种方法的难度取决于 makefile 的复杂性。

移植代码:这取决于您使用的 API 和库,以及您将遇到的编译器警告/错误/怪癖。如需更具体的答案,请提出更具体的问题。

【讨论】:

【参考方案4】:

我可以建议的一件事是使用 CMake。如果您使用 CMake 实现构建系统以在 Linux 上为 GCC 自动生成 makefile,则只需稍作修改即可为 VC++ 自动生成项目和解决方案。

当然,这意味着学习一个全新的构建工具,所以它可能不适合你。这只是一个建议。

【讨论】:

【参考方案5】:

我不知道一种简单的从一个转换到另一个的简单方法,但是..

假设你只使用ANSI C/C++特性,通常你不需要转换makefile,只要看看里面有哪些.c/.cpp文件,然后将它们添加到VS项目中即可;您还必须检查编译器选项和定义的宏,以将它们放入 VS 项目中。我这样做是为了编译 expat、freetype、agg 等库,没有问题。

【讨论】:

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

将 Visual Studio C++ 移植到 Linux

将 Visual C++ 项目移植到 C# [关闭]

将源代码从 Visual C++ 移植到 GCC 都有哪些陷阱[关闭]

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

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

Visual C 的 strdupa() 实现