如何在Microsoft Visual Studio中使用GCC?

57

我正在创建一个非常大的项目(几千行),因此不想使用Notepad ++。使用集成开发环境会使它更容易。我有Microsoft Visual Studio的经验并且喜欢它。是否有一种简单的方法可以在Microsoft Visual Studio中使用Cygwin的GCC?

或者,除了NetBeans和Eclipse之外,是否还有其他适用于Windows的好的GCC IDE?(我非常讨厌这两个IDE)。


2
很难这么想。据我所知,GCC也存在于Windows上。除此之外,你为什么要使用GCC呢?你需要做一些特定于Windows的事情吗?如果是这样,Visual Studio显然会更有优势。 - bash.d
Visual Studio 可以使用 makefiles。 - Luke
FTP客户端将基于Unix而不是Windows。我可能应该在我的问题中提到这一点。 - MasterGberry
http://www.visualgdb.com - Stuart Gillibrand
你可以试试Qt Creator。在我的工作站上展示之后,我团队的所有成员都放弃了他们的eclipse安装。它可以与CMake(支持gcc out of the box)、Makefiles及其自己的QMake系统一起使用(但我不建议使用这个)。 - Rudi
3个回答

42

有几种方法可以实现:

选项1:创建自定义构建工具

Visual Studio 2005及更高版本将允许您注册自定义构建工具。它们告诉IDE如何将一种形式的文件(例如一个.cpp文件)转换为另一种形式(例如一个.obj文件)。

据我所知,至今没有人为GCC做过这件事。而且,自己做需要编写COM代码,这可能对于只有一个项目来说太深奥了。你必须有一个令人信服的理由来承担这个项目。

然后,您必须手动调整每个项目,告诉它使用自定义构建工具而不是默认的,因为您正在使用Visual C++已经知道的文件名扩展名(.cpp,可能)。如果您尝试在从多个模块构建的单个可执行文件中混合使用VC++和g++编译器,您将遇到麻烦。

好处是,如果您想开始一个开源项目,这听起来对我来说是一个不错的选择。我预计您很快就会聚集大量用户群体。

选项2:Makefile项目

  1. 启动Visual Studio,然后选择文件 > 新建项目。

  2. 在Visual C++部分中,选择Makefile项目

  3. 填写Makefile项目向导:

    • 构建命令行:make
    • 清理命令:make clean
    • 重新生成命令行:make clean all

如果您已经根据项目名称命名了可执行文件,并且它位于Visual Studio期望找到它的位置,则可以保留输出(用于调试)字段不变。

除非你知道这些字段是什么并且知道为什么要更改它们,否则请勿更改。例如,你可以选择在“预处理器定义”行上传递-D标志以获取单独的调试和发布输出。如果你知道你想要这样做,你也知道如何设置它,所以我不会在长篇回答中解释它。

对于发布构建,你将被问相同的一组问题。如果你想要进行单独的调试和发布构建,你需要在这里进行任何更改。

完成所有这些工作后,你仍然需要创建 Makefile ,并将 make.exe 添加到 PATH 中。尽管像调试与发布之间的问题一样丑陋,但深入探讨这个级别的细节会使答案偏题。

尽管看起来很麻烦,但这比创建自定义构建工具要容易。而且,你说你最终需要移植到Unix,因此你无论如何都需要那个 Makefile

选项3:跨平台开发

你说你想在某个时间点将这个程序移植到Unix,但这并不意味着你现在必须在Windows上使用GCC。完全可以编写程序,使其能够在Windows的Visual C++和* ix系统的GCC / Makefiles下构建。

有几个工具可以使这个过程更容易。其中一个非常受欢迎的选择是CMake,它在较新版本的Visual Studio中作为安装时选项提供。还有许多其他替代工具,如SConsBakefile


1
我相信你可以使用Visual C++附带的nmake工具,并为使用gcc进行构建提供规则,无需查找第三方make。 - Ben Voigt
3
@BenVoigt:当然,但是为MS nmake编写的Makefile(与Bell Labs nmake相对)将无法在Unix上移植,正如OP所希望的那样。 MS nmakecmd.exe一样解释命令,而POSIX make默认使用/bin/sh。因此,在* ix Makefile中,“clean”目标中的rm命令必须在nmake.mak文件中更改为del。除此之外,nmake相对于已经占据了*ix世界的GNU和BSD make而言受到限制。此外,OP已经指定他正在使用Cygwin。 - Warren Young
1
@WarrenYoung 按照第二个选项,是否可以进行逐步调试?我将我的hello.cpp添加到Visual Studio中的源文件目录中,添加了断点,然后按下F5。然后我被告知exe和相关的cygwin dll是没有符号构建的;而对于Windows dll:无法找到或打开PDB文件 - user2023370
2
CMake 可以帮助设置交叉编译的链接和包含文件夹,但不能防止您使用不支持交叉编译的语言特性或库。 - Denise Skidmore
5
有关 Visual Studio 2015/2017 的答案是否有更新? - Royi
显示剩余2条评论

7

Clang

你可以使用Clang编译器与Visual Studio一起,以便将目标设置为Android、iOS和Windows。

如果你的目标是Android,则可以使用安卓NDK和工具链中提供的Clang/LLVM编译器来构建项目。同样地,Visual Studio也可以在Mac上运行Clang来构建针对iOS的项目。支持Android和iOS的功能包含在“使用C++开发移动应用程序”工作负载中。有关如何针对Android或iOS进行设置的更多信息,请查看我们标记为“Android”和“iOS”的帖子。

如果你的目标是Windows,则有几种选择:

  1. 使用Clang/LLVM;“Windows的Clang”中包括了在Visual Studio中安装Clang/LLVM作为平台工具集的说明。
  2. 使用Clang来使用Clang/C2(带有Microsoft代码生成的Clang前端)针对Windows进行设置。 enter image description here

GCC

如果你的项目针对Linux或Android,则可以考虑使用GCC。Visual Studio的C++ Android开发本地支持使用随安卓NDK一起提供的GCC构建项目,就像使用Clang那样。你也可以使用GCC来针对Linux进行目标设置-无论是远程还是本地使用Windows子系统for Linux

enter image description here

请查看我们有关使用CMake进行Visual C++ Linux开发的帖子,以获取有关如何使用Visual Studio来针对GCC的Linux进行目标设置的更多信息。如果你特别想要针对WSL进行本地设置,请查看从Visual Studio针对WSL的目标设置

来源:https://devblogs.microsoft.com/cppblog/use-any-c-compiler-with-visual-studio/


4

我来自未来。

我使用Visual Code在Win/Lin/Mac上持续调试一个C/C++工具链,并使用从Choclatey安装的MinGW。 (这是为了保持我的理智 - 安装GDB和GCC的方式任意)

我使用MS自己奇怪的JSON makefile运行了它,配合GCC、GDB和IntelliSense。 总有一天,某个人(你?)会编写Gradle或Python脚本来生成这些文件;现在文档中在线示例似乎可用。

看起来需要三种类型的JSON文件;

  • 整个工作区只需要一个IntelliSense配置
  • 每个要调试的二进制文件需要一个调试配置条目
    • 这些可以调用构建任务
  • 每个构件需要一个构建任务
    • 我认为没有"require"或"dependency"的东西; 抱歉

1
这个问题是关于Visual Studio的。而这个提议的答案则是在谈论Visual Studio Code。因此,它并不适用。 - IInspectable
1
@IInspectable,恐怕你错了。 - pal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接