【问题标题】:How to use GCC with Microsoft Visual Studio?如何在 Microsoft Visual Studio 中使用 GCC?
【发布时间】:2024-01-08 02:24:01
【问题描述】:

我正在创建一个非常大的项目(几千行),因此宁愿不使用 Notepad++。 IDE 将使它变得如此容易。我有使用 Microsoft Visual Studio 的经验并且喜欢它。是否有一些简单的方法可以在 Microsoft Visual Studio 中使用 Cygwin 的 GCC?

另外,除了 NetBeans 和 Eclipse 之外,还有其他适用于 GCC 的好的 Windows IDE 吗? (我非常讨厌他们两个。)

【问题讨论】:

  • 几乎不这么认为。就我而言,GCC 也适用于 Windows。除此之外,你为什么要使用 GCC?你需要做一些特定于 Windows 的事情吗?如果是这样,Visual Studio 显然是一个优势。
  • Visual Studio 可以使用 makefile。
  • FTP 客户端将基于 unix,而不是基于 Windows。我可能应该在我的问题中提到这一点。
  • 你可以试试Qt Creator。我团队的所有成员在我的工作站上看到 Eclipse 后都放弃了安装。它可以与 CMake(支持开箱即用的 gcc)、Makefile 和他们自己的 QMake 系统(我不推荐这个)一起使用。

标签: windows visual-studio gcc cygwin


【解决方案1】:

这里有几种方法:

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

Visual Studio 2005 及更高版本将允许您register custom build tools。它们告诉 IDE 如何将一种形式的文件(例如 .cpp 文件)转换为另一种形式(例如 .obj 文件)。

据我所知,还没有人为 GCC 做过这件事。而且,自己做这件事需要编写 COM 代码,这对于一个项目来说可能太深了,无法深入研究。你必须有一个令人信服的理由才能接受这个项目。

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

从好的方面来说,如果您想开始一个开源项目,这对我来说听起来不错。我希望您能迅速聚集大量用户群。

选项 2:Makefile 项目

  1. 启动 Visual Studio 并说 File > New Project。

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

  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

【讨论】:

  • 我很确定您可以使用 Visual C++ 提供的nmake 工具,并为它指定使用 gcc 构建的规则。无需寻找第三方品牌。
  • @BenVoigt:当然可以,但是为MS nmake(而不是Bell Labs nmake)编写的Makefiles 不会像OP 所希望的那样移植到Unix。 MS nmakecmd.exe 那样解释命令,而 POSIX make 默认使用 /bin/sh。因此,clean 目标中的 rm 命令对于 *ix Makefile 必须是 delnmake .mak 文件中。最重要的是,与接管 *ix 世界的 GNU 和 BSD make 相比,nmake 是残废的。另外,OP 已经指定他正在使用 Cygwin。
  • @WarrenYoung 在选项 2 之后,是否可以进行单步调试?我将我的 hello.cpp 添加到 Visual Studio 中的 Source Files 目录中,添加了一个断点,然后按 F5。然后我被告知 exe 和相关的 cygwin dll 是在没有符号的情况下构建的;而对于 Windows dll:Cannot find or open the PDB file.
  • CMake 可能有助于设置链接并包含用于交叉编译的文件夹,但不会阻止您使用不交叉编译的语言功能或库。
  • 在 Visual Studio 2015 / 2017 中对该答案的任何更新?
【解决方案2】:

我来自未来。

我在 Win/Lin/Mac 上使用 Visual Code 和从 Choclatey 安装的 MinGW 一直使用(戳)一个 C/C++ 工具链。 (这是为了我的理智而做的——随心所欲地安装 GDB 和 GCC)

我已经使用 MS 自己奇怪的 JSON 生成文件通过 GCC 和 GDB 以及 IntelliSense 运行它。 总有一天,有人(你?)会编写一个 Gradle 或 Python 脚本来生成这些;现在the examples online in the docs 似乎可以工作。

好像需要三种JSON的东西;

  • 整个工作区的单个 IntelliSense 配置
  • Debugging Configuration 要调试的每个二进制文件的条目
    • 这些可以调用构建任务
  • Build Task 每个工件
    • 我不认为存在“需要”或“依赖”的东西-mah-bob;对不起

【讨论】:

  • 问题是关于 Visual Studio。这个提议的答案是关于 Visual Studio Code 的。因此,它不是。
  • @IInspectable 恐怕你弄错了
【解决方案3】:

叮当

您可以将 Clang 编译器与 Visual Studio 结合使用,以针对 Android、iOS 和 Windows。

如果您的目标是 Android,则可以使用 Android NDK 和工具链附带的 Clang/LLVM 编译器来构建您的项目。同样,Visual Studio 可以使用在 Mac 上运行的 Clang 来构建面向 iOS 的项目。 “使用 C++ 进行移动开发”工作负载中包含对 Android 和 iOS 的支持。有关针对 Android 或 iOS 的更多信息,请查看我们用关键字“Android”和“iOS”标记的帖子。

如果您的目标是 Windows,您有几个选择:

  1. 使用Clang/LLVM; “Clang for Windows”包括在 Visual Studio 中将 Clang/LLVM 作为平台工具集安装的说明。
  2. 通过 Clang/C2 使用 Clang 来定位 Windows(带有 Microsoft 代码生成的 Clang 前端)。

GCC

如果您的项目针对 Linux 或 Android,您可以考虑使用 GCC。 Visual Studio 的 C++ Android 开发本机支持使用 Android NDK 附带的 GCC 构建您的项目,就像它为 Clang 所做的那样。您还可以使用 GCC 以远程或本地方式使用 Windows Subsystem for Linux 定位 Linux。

查看我们在Visual C++ for Linux Development 上的帖子,了解更多关于如何使用 Visual Studio 来定位带有 GCC 的 Linux 的信息。如果您对本地定位 WSL 特别感兴趣,请查看Targeting WSL from Visual Studio

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

【讨论】: