在 VS 2005(8) IDE 中使用 GCC
-
09-06-2019 - |
题
有没有办法利用 GCC 编译器,同时仍然能够通过 Visual Studio IDE 进行开发?
我们的项目是跨平台的,我经常遇到麻烦 同事 因为我正在检查不符合标准的代码(这可以归因于 VS 编译器!)。
我仍然希望能够使用 MS 编译器进行编译,这样我就可以继续调试等,但是我希望能够 转变 使用 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 切换到命令行。每次构建时都会自动为您完成。
其他提示
我不认为有一个简单的开关,因为gcc的命令行选项与VS有很大不同。无论如何,仅仅运行编译器就很重要,因为您的构建系统可能会设置一堆预处理器定义和构建变量,需要设置这些变量才能成功进行编译。
如果你的同事正在使用 Unix,他可能有一个基于 make、scons 或 cmake 的构建系统。您可以使用 西格文 在 Windows 上安装标准 Unix 工具链,包括 gcc、make、flex、bison 和所有其他 Unix 好东西。scons 和 cmake 有本机版本,但它们会尝试使用 VS,所以这对您没有帮助。我还没有尝试通过 Cygwin 安装它们,看看这是否会强制它们使用 gcc,但这可能与您无关。
创建一个使用 VS 编译器的 make 系统是可能的,但很痛苦(曾经做过)。还有一个不同的问题。;)
然后,您可以使用特殊的构建步骤从 VS 内部运行 gcc 编译。最好有一个单独的构建目标(如调试和发布),并且您可以在项目文件中创建它们(它们只是 ASCII 文件,请检查它们),但我还不够 VS 人员知道那是多么容易做到的。保持它最新会有点痛苦,您可能需要编写一个脚本来自动创建它。
我必须维护单独的 makefile 以便使用 gcc 进行编译。学习 make 需要一定的前期成本,但您将受益于对代码的深入了解以及 VS C++ 和 gcc 之间的差异。当我这样做时,我使用的是 VC 6,所以现在使用 VS 2005 可能有更好的方法。
尝试 Cygwin,只要正确设置所有 Makefile,您始终可以尝试在 VS 和 GCC 上进行编译
这取决于您的项目文件的复杂程度:
你肯定需要一个像 cygwin 这样的 gcc 环境。
对于小型项目或单个文件编译,您可以使用自定义构建工具(规则文件)
对于大型项目/解决方案,我从 vcproj/sln 文件自动生成一个自动工具配置/makefile,并在 IDE 中对其进行编译。gcc 的源文件/警告和错误行被转换为 IDE 等效项(可在输出窗口中单击)。
想必您已经在使用 makefile 来构建您的项目,因为它是跨平台的。只需将您的 VS 项目设置为具有不同项目配置的 makefile 项目,这些项目配置会使用不同的参数来启动 makefile,以指示构建是针对 MSVC 还是针对 GCC。
如果您的 MSVC makefile 构建能够构建调试文件 (PDB)——它应该能够做到这一点,那么 VS 调试器也将无缝工作。
然后,在 Visual Studio 中使用 GCC 进行构建就像选择工具栏上的“GCC”配置下拉列表一样简单。