4

您如何将带有由 Linux 中的 GNU C++ 制作的 makefile 的 C++ 程序移植到 Visual C++?

4

5 回答 5

3

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

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

于 2009-03-17T17:28:44.053 回答
2

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

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

于 2009-03-17T13:27:12.947 回答
2

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

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

于 2009-03-18T03:49:02.887 回答
1

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

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

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

于 2009-03-22T09:41:44.307 回答
1

CMake 具有生成视觉工作室项目的优点。

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

于 2015-08-21T04:33:44.747 回答