C++ 在VS2005(8)IDE中使用GCC

C++ 在VS2005(8)IDE中使用GCC,c++,visual-studio,visual-c++,gcc,cross-platform,C++,Visual Studio,Visual C++,Gcc,Cross Platform,在仍然能够通过Visual Studio IDE进行开发的同时,是否有办法使用GCC编译器? 我们的项目是跨平台的,我经常因为我签入的代码不符合标准而遇到麻烦(这可以归因于VS编译器!) 我仍然希望能够使用MS编译器进行编译,这样我就可以继续调试,等等,但是我希望能够切换到使用GCC进行编译,这样我就可以确保我不会破坏其他平台上的构建 这可能吗?我必须维护单独的makefile,以便使用gcc进行编译。有一个与学习制作相关的前期成本,但是你会从代码的亲密知识和VS C++和GCC之间的差异中受益

在仍然能够通过Visual Studio IDE进行开发的同时,是否有办法使用GCC编译器?

我们的项目是跨平台的,我经常因为我签入的代码不符合标准而遇到麻烦(这可以归因于VS编译器!)

我仍然希望能够使用MS编译器进行编译,这样我就可以继续调试,等等,但是我希望能够切换到使用GCC进行编译,这样我就可以确保我不会破坏其他平台上的构建


这可能吗?

我必须维护单独的makefile,以便使用gcc进行编译。有一个与学习制作相关的前期成本,但是你会从代码的亲密知识和VS C++和GCC之间的差异中受益。当我这样做的时候,我使用的是VC6,所以现在VS 2005可能有更好的方法。

试试Cygwin,只要你正确设置了所有的makefile,你就可以尝试在VS和GCC上编译。

我认为没有简单的切换,因为GCC的命令行选项与VSs非常不同。在任何情况下,只运行编译器都是非常重要的,因为构建系统可能会设置一组预处理器定义和构建变量,这些变量需要设置才能使编译成功

如果您的同事正在使用Unix,他可能有一个基于make、scons或cmake的构建系统。您可以使用在Windows上安装标准Unix工具链,包括gcc、make、flex、bison和所有其他Unix产品。scons和cmake有自己的版本,但它们会尝试使用VS,所以这对您没有帮助。我还没有尝试通过Cygwin安装它们,看看这是否会迫使它们使用gcc,但这可能与您无关

创建一个使用VS编译器的make系统是可能的,但是很痛苦(已经完成了,已经完成了)。还有一个不同的问题


然后,您可以使用一个特殊的构建步骤从VS内部运行gcc编译。最好有一个单独的构建目标(如调试和发布),您可以在项目文件中创建这些目标(它们只是ASCII文件,请检查),但我不是VS人员,不知道这样做有多容易。保持它的最新状态会有点困难,您可能需要编写一个脚本来自动创建它。

这取决于您的项目文件有多复杂:

您肯定需要像cygwin这样的gcc环境

  • 对于小型项目或单个文件编译,可以使用自定义生成工具(规则文件)

  • 对于大型项目/解决方案,我将从vcproj/sln文件自动生成一个autotools configure/makefile,并在IDE中编译它。gcc的警告和错误的源文件/行被转换为它们的等效IDE(可在输出窗口中单击)


当然有办法做到这一点——这就是我们使用索尼的工具链(基于gcc)为PS3开发的方法。我不知道它到底是如何工作的,但它与VS无缝集成

我认为您需要做的是将其设置为使用makefile构建(可能最简单),或者编写一个包装程序,将VC参数转换为gcc参数。此外,如果您希望错误/警告输出为VS格式(因此您可以单击它并在编辑器中获得该文件/行),则需要一些东西来转换输出

这些东西可能会帮助您在WRS/VxWorks版本中使用VS gcc工具的定义:


特别注意转换错误输出的代码。

可能您已经在使用makefile构建项目,因为它是跨平台的。只需将您的VS项目设置为具有不同项目配置的makefile项目,这些项目配置使用不同的参数启动makefile,以指示构建是否用于MSVC或GCC

如果您的MSVC makefile构建能够构建调试文件(PDB)——它应该能够做到这一点,那么VS调试器也将无缝工作


然后在VisualStudio中使用GCC进行构建就像选择工具栏上的“GCC”配置下拉列表一样简单。

我要建议的内容仍然需要一个makefile,因此我部分重复了前面回复中的建议。或者,正如前面提到的,可能您已经有了一个makefile,在这种情况下,您将有更少的步骤来完成我将要描述的内容

一旦知道了在代码中调用make或g++的特定windows命令行命令,就可以在visualstudio项目中创建一个“预构建事件”。(“项目属性>>配置属性>>生成事件>>预生成事件”)

预构建事件可以调用bat文件脚本或计算机上的任何其他脚本,该脚本将能够返回错误代码。从本质上说,“脚本正常”或“脚本失败”是指您的脚本可以返回到VisualStudio的通信量

脚本不会自动看到所有visual studio环境变量(例如$(InputDir)、$(ProjectDir)、$(SolutionName)等),但是,在指定如何调用脚本时,可以使用这些变量。换句话说,您可以将这些值作为参数传递给脚本

设置此选项,以便每次在Visual Studio中生成时,预生成事件都会首先尝试在代码上运行make/g++。如果您的脚本(调用make/g++的脚本)检测到任何问题,那么脚本将返回一个错误,构建可以立即停止。脚本可以打印到stdout或stderr,并且该输出应该在Visual Studio生成输出窗口中可见(该窗口通常显示“================生成:3成功,0失败”)

您可以打印脚本:

“生成失败,检测到不可移植代码,make/g++返回以下内容:……”

这样,您就不必记得定期从可视模式切换