在VS 2005(8)IDE中使用GCC
有没有一种方法可以利用GCC编译器,同时仍然可以通过Visual Studio IDE进行开发?
我们的项目是跨平台的,我经常遇到同事的麻烦,因为我正在检入不符合标准的代码(这可以归因于VS编译器!)。
我仍然希望能够使用MS编译器进行编译,因此我可以继续进行调试等,但是我希望能够切换为使用GCC进行编译,只是为了确保我不会破坏在其他平台上的构建。
这可能吗?
解决方案
回答
我必须维护单独的makefile以使用gcc进行编译。与学习make相关的前期成本,但是我们将从代码的专业知识以及VS C ++和gcc之间的差异中受益。当我这样做时,我使用的是VC 6,因此现在使用VS 2005可能会有更好的方法。
回答
尝试Cygwin,只要正确设置所有Makefile,就可以始终尝试在VS和GCC上进行编译
回答
我认为没有一个简单的开关,因为gcc的命令行选项与VS有很大的不同。在任何情况下,仅运行编译器都是不平凡的,因为构建系统可能设置了一堆预处理器定义和构建变量,而这些变量需要设置才能成功进行编译。
如果同事正在Unix上工作,那么他可能仍然拥有基于make,scons或者cmake的构建系统。我们可以使用Cygwin在Windows上安装标准的Unix工具链,包括gcc,make,flex,bison和所有其他Unix好东西。有本地版本的scons和cmake,但是这些版本会尝试使用VS,因此对我们无济于事。我没有尝试通过Cygwin安装它们,以查看是否将它们强制转换为gcc,但这可能与我们无关。
创建使用VS编译器的make系统是可能的,但是很痛苦(在那完成了)。还有一个不同的问题。 ;)
然后,我们可以使用特殊的构建步骤从VS内部运行gcc编译。最好有一个单独的构建目标(例如Debug和Release),并且可以在项目文件中创建它们(它们只是ASCII文件,将其检出),但是我对VS的人还不够知道这样做会多么容易。保持最新状态会有些痛苦,我们可能需要编写一个脚本来自动创建它。
回答
这取决于项目文件的复杂程度:
我们绝对需要一个像cygwin这样的gcc环境。
- 对于小型项目或者单个文件编译,我们可以使用自定义构建工具(规则文件)
- 对于大型项目/解决方案,我正在从vcproj / sln文件自动生成一个autotools configure / makefile文件,并将其在IDE中进行编译。警告和gcc错误的源文件/行被转换为等效于IDE的文件(可在输出窗口中单击)。
回答
当然,有很多方法可以做到这一点-这就是我们使用sony的工具链(基于gcc)为PS3开发的方式。我不知道它是如何工作的,但是它可以无缝地集成到VS中。
我认为我们需要做的是或者将其设置为使用makefile生成(可能是最简单的),或者编写一个将VC参数转换为gcc参数的包装程序。另外,如果我们想要VS格式的错误/警告输出(因此我们可以单击它并在编辑器中获取该文件/行),则需要一些东西来转换输出。
这些东西可能会进行有关将VS与WRS / VxWorks版本一起使用的相关讨论
gcc工具:
尤其要注意链接到该程序的程序,该程序将转换错误输出。
回答
由于它是跨平台的,因此大概我们已经在使用makefile来构建项目。只需将VS项目设为具有不同项目配置的makefile项目,这些项目配置会使用不同的参数来启动makefile,以指示生成的版本是否适用于MSVC或者GCC。
如果MSVC makefile构建能够构建应该执行的调试文件(PDB),则VS Debugger也将无缝运行。
然后,在Visual Studio中使用GCC进行构建就像在工具栏上选择" GCC"配置下拉菜单一样简单。
回答
我要建议的内容仍然需要一个makefile,因此我在部分重复了先前答复中的建议。或者,如前所述,也许我们已经有一个makefile,在这种情况下,我们可以执行甚至更少的步骤来完成我将要描述的内容。
一旦知道了用于在代码上调用make或者g ++的特定Windows命令行命令,便可以在Visual Studio项目中创建一个"预构建事件"。 ("项目属性>>配置属性>>生成事件>>预生成事件")。
生成前事件可以调用bat文件脚本或者计算机上的任何其他脚本,并且该脚本将能够返回错误代码。本质上,"脚本正常"或者"脚本失败"是脚本可以与Visual Studio进行通讯的程度。
该脚本不会自动查看所有Visual Studio环境变量(例如$(InputDir),$(ProjectDir),$(SolutionName)等),但是我们可以在指定如何调用脚本时使用这些变量。换句话说,我们可以将这些值作为参数传递给脚本。
进行设置,以便每次在Visual Studio中进行构建时,预构建事件都会首先尝试在代码上运行make / g ++。如果脚本(调用make / g ++的脚本)检测到任何问题,那么该脚本将返回错误,并且可以立即停止构建。该脚本可以打印到stdout或者stderr,并且输出应该在Visual Studio Build输出窗口中可见(该窗口通常显示类似" =========== Build:3成功,0失败"的窗口) )。
我们可以打印脚本:
"构建失败,检测到不可移植的代码,make / g ++返回以下内容:........."
这样,我们不必记住要定期从Visual Studio切换到命令行。每次构建时,它将自动为我们完成。