代码之家  ›  专栏  ›  技术社区  ›  Alan

在vs 2005(8)ide中使用gcc

  •  10
  • Alan  · 技术社区  · 16 年前

    有没有一种方法可以在仍然能够通过Visual Studio IDE开发的同时使用GCC编译器?

    我们的项目是跨平台的,我经常因为 colleague 因为我正在签入不符合标准的代码(这可以归因于vs编译器!).

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

    这有可能吗?

    7 回复  |  直到 10 年前
        1
  •  5
  •   pestophagous    10 年前

    我要建议的仍然需要一个makefile,所以我会部分重复先前回复的建议。或者,正如前面提到的,也许您已经有了一个makefile,在这种情况下,为了完成我将要描述的内容,您将有更少的步骤。

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

    预生成事件可以调用BAT文件脚本或计算机上的任何其他脚本,该脚本将能够返回错误代码。基本上,“script ok”或“script failed”是脚本可以返回到Visual Studio的通信量的范围。

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

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

    您可以让脚本打印:

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

    这样,您就不必记住定期从Visual Studio切换到命令行。它将在每次构建时自动为您完成。

        2
  •  1
  •   slicedlime    16 年前

    当然有很多方法可以做到这一点——这就是我们如何利用索尼的工具链(基于GCC)为PS3开发的。我不知道它是如何工作的,但是它可以无缝地集成到vs.

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

    这些东西可以帮你 a related discussion 关于将vs与wrs/vxworks版本一起使用 GCC工具:

    尤其要注意 program linked there 它转换错误输出。

        3
  •  1
  •   DirkReiners    16 年前

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

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

    创建一个使用vs编译器的make系统是可能的,但是很痛苦(曾经这样做过)。还有一个不同的问题。;)

    然后,您可以使用一个特殊的buildstep从内部运行gcc编译,与之相比,最好有一个单独的构建目标(如debug和release),并且您可以在项目文件中创建这些目标(它们只是ASCII文件,请签出它们),但我还不足以了解这有多简单。保持更新会有点痛苦,您可能需要编写一个脚本来自动创建它。

        4
  •  0
  •   dwilkins    16 年前

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

        5
  •  0
  •   rednax    16 年前

    尝试cygwin,只要正确设置了所有makefile,就可以尝试在vs和gcc上编译。

        6
  •  0
  •   ASDF    16 年前

    这取决于项目文件的复杂程度:

    你肯定需要一个像Cygwin这样的GCC环境。

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

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

        7
  •  0
  •   Michael Burr    16 年前

    大概你已经在使用makefile来构建你的项目了,因为它是跨平台的。只需使用不同的项目配置使您的vs项目成为makefile项目,这些配置使用不同的参数启动makefile,以指示构建是否适用于MSVC或GCC。

    如果您的msvc makefile build能够构建调试文件(pdb),它应该能够做到这一点,那么vs调试器也将无缝工作。

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