10

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

我们的项目是跨平台的,我经常遇到同事的麻烦,因为我正在检查不符合标准的代码(这可以归因于 VS 编译器!)。

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

这可能吗?

4

7 回答 7

5

我将要建议的内容仍然需要生成文件,因此我部分重复了之前回复中的建议。或者,如前所述,也许您已经有一个 makefile,在这种情况下,您将需要更少的步骤来完成我将要描述的内容。

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

pre-build 事件可以调用 bat 文件脚本或您机器上的任何其他脚本,并且该脚本将能够返回错误代码。从本质上讲,“脚本正常”或“脚本失败”是您的脚本可以返回到 Visual Studio 的通信量的范围。

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

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

您可以打印脚本:

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

这样,您不必记得定期从 Visual Studio 切换到命令行。每次构建时都会自动为您完成。

于 2008-09-16T17:13:42.063 回答
1

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

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

创建一个使用 VS 编译器的 make 系统是可能的,但很痛苦(去过那里,做过那个)。还有一个不同的问题。;)

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

于 2008-09-15T15:24:03.880 回答
1

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

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

这些东西可以帮助您在有关将 VS 与 WRS/VxWorks 版本的 gcc 工具一起使用的相关讨论中:

特别注意那里链接的程序,它转换错误输出。

于 2008-09-16T06:54:41.710 回答
0

我必须维护单独的 makefile 以使用 gcc 进行编译。学习 make 会产生前期成本,但您将受益于对代码的深入了解以及 VS C++ 和 gcc 之间的差异。当我这样做时,我使用的是 VC 6,所以现在使用 VS 2005 可能有更好的方法。

于 2008-09-15T13:39:09.810 回答
0

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

于 2008-09-15T13:43:48.893 回答
0

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

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

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

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

于 2008-09-15T16:07:34.913 回答
0

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

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

然后在 Visual Studio 中使用 GCC 构建就像选择工具栏上的“GCC”配置下拉菜单一样简单。

于 2008-09-16T16:44:16.580 回答