有没有办法在使用 GCC 编译器的同时仍然能够通过 Visual Studio IDE 进行开发?
我们的项目是跨平台的,我经常遇到同事的麻烦,因为我正在检查不符合标准的代码(这可以归因于 VS 编译器!)。
我仍然希望能够使用 MS 编译器进行编译,所以我可以继续调试等,但是我希望能够切换到使用 GCC 编译,这样我就可以确定我没有破坏在其他平台上构建。
这可能吗?
有没有办法在使用 GCC 编译器的同时仍然能够通过 Visual Studio IDE 进行开发?
我们的项目是跨平台的,我经常遇到同事的麻烦,因为我正在检查不符合标准的代码(这可以归因于 VS 编译器!)。
我仍然希望能够使用 MS 编译器进行编译,所以我可以继续调试等,但是我希望能够切换到使用 GCC 编译,这样我就可以确定我没有破坏在其他平台上构建。
这可能吗?
我将要建议的内容仍然需要生成文件,因此我部分重复了之前回复中的建议。或者,如前所述,也许您已经有一个 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 切换到命令行。每次构建时都会自动为您完成。
我不认为有一个简单的开关,因为 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 人知道这将是多么容易。保持最新会有点痛苦,您可能需要编写一个脚本来自动创建它。
当然有办法做到这一点——这就是我们使用索尼的工具链(基于 gcc)为 PS3 开发的方式。我不知道它是如何工作的,但它可以无缝地集成到 VS 中。
我认为您需要做的是将其设置为使用 makefile 构建(可能是最简单的),或者编写一个将 VC 参数转换为 gcc 参数的包装程序。此外,如果您想要 VS 格式的错误/警告输出(因此您可以单击它并在编辑器中获取该文件/行),您需要一些东西来转换输出。
这些东西可以帮助您在有关将 VS 与 WRS/VxWorks 版本的 gcc 工具一起使用的相关讨论中:
特别注意那里链接的程序,它转换错误输出。
我必须维护单独的 makefile 以使用 gcc 进行编译。学习 make 会产生前期成本,但您将受益于对代码的深入了解以及 VS C++ 和 gcc 之间的差异。当我这样做时,我使用的是 VC 6,所以现在使用 VS 2005 可能有更好的方法。
试试 Cygwin,只要你正确设置了所有的 Makefile,你总是可以尝试在 VS 和 GCC 上编译
这取决于您的项目文件的复杂程度:
你肯定需要像 cygwin 这样的 gcc 环境。
对于小型项目或单个文件编译,您可以使用自定义构建工具(规则文件)
对于大型项目/解决方案,我从 vcproj/sln 文件自动生成一个 autotools 配置/makefile 并在 IDE 中编译它。gcc 的源文件/警告和错误行被转换为它们的 IDE 等效项(可在输出窗口中单击)。
大概您已经在使用 makefile 来构建您的项目,因为它是跨平台的。只需将您的 VS 项目设置为具有不同项目配置的 makefile 项目,这些项目配置会使用不同的参数来启动 makefile,以指示构建是用于 MSVC 还是 GCC。
如果您的 MSVC makefile 构建能够构建调试文件 (PDB) - 它应该能够做到,那么 VS 调试器也将无缝工作。
然后在 Visual Studio 中使用 GCC 构建就像选择工具栏上的“GCC”配置下拉菜单一样简单。