端口GNU C ++程序到Visual C ++

时间:2009-03-17 13:16:35

标签: c++ visual-studio visual-c++ g++ port

如何使用Linux中的GNU C ++制作的makefile将C ++程序移植到Visual C ++?

5 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

假设您只使用ANSI C / C ++功能,通常您不需要转换makefile,只需查看其中的.c / .cpp文件并将它们添加到VS项目中;您还必须检查编译器选项和已定义的宏,以将它们放入VS项目中。我这样做是为了编译像expat,freetype,agg等lib这样的lib,没有问题。

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

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

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

还有一点需要注意:Visual Studio和G ++有不同的编译器怪癖。在大多数情况下,它们都非常符合C ++标准,但是在一个中工作的略微不合标准的代码可能在另一个中不起作用。我发现在处理模板时尤其如此,在许多情况下,Visual Studio非常容许语法错误。

答案 4 :(得分:1)

CMake具有创建视觉工作室项目的精确性。

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