【问题标题】:using Clang in windows 10 for C/C++在 Windows 10 中为 C/C++ 使用 Clang
【发布时间】:2020-09-16 06:11:12
【问题描述】:

我目前正在学习 C,通过 EDX/Harvard 参加 CS50 在线课程。他们让我们在基于云的 CS50 IDE/沙盒中使用 Clang。除此之外,他们还没有解释如何使用 Clang。因此我想知道;如何在 Windows 10 中设置 clang?以及与 VisualStudio Code 一起使用?

【问题讨论】:

标签: c windows visual-studio-code clang cs50


【解决方案1】:

在 Windows 上,Clang 不是自给自足的,应该与其他编译器结合使用:MinGW (GCC) 或 MSVC。 Clang 将使用该编译器的标准库(和其他库/头文件),因为它不附带自己的标准库。

如果您想将它与 MSVC 一起使用并安装它,运行 clang-cl 而不是 cl 应该可以工作。

但既然你提到了 VSC,我假设你不想要 MSVC。那么……

如果您想将它与 MinGW 一起使用并安装它,请使用 clang --target=x86_64-w64-windows-gnu 而不是 gcc,它也应该可以正常工作。 (假设您的 MinGW 生成 64 位应用程序。如果是 32 位应用程序,请将 x86_64 替换为 i686。)

如果您还没有 MinGW,您可以从 MSYS2 获取新版本。然后你可以选择安装他们的非官方 Clang 版本而不是常规版本,它的优点是自动使用 --target=x86_64-w64-windows-gnu(所以你不必手动编写),但也会占用更多的驱动器空间,过去对我来说有点不稳定。

【讨论】:

  • 但是 Mingw 也不提供任何库,它使用 MSVC C 运行时。这反过来又不是最新的 C 标准。
  • (虽然从学生的角度来看,他们使用 gcc 还是 clang 并不重要,除非后者可以说应该有更好的编译器消息)
  • @Lundin 是的,使用 MinGW 编译的程序通常使用 Windows 附带的 msvcrt.dll。但是您还需要 C 标准库头文件,这些头文件随 MinGW 提供,但不随 Clang 提供。如果 OP 想使用 C++,他们还需要 libstdc++,它也随 MinGW 而不是 Clang。 MinGW 发行版还包括其他一些库,因发行版而异。 Clang 似乎带有 some 标头,但它不是自给自足的,它本身甚至无法编译一个 hello world。
  • 到目前为止我没有遇到任何一致性问题。 msvcrt.dllprintf/scanf 不一致,但您不必使用它们。有一个标志使 MinGW 使用自己的,正确实现这些功能(如果 Clang 使用 MinGW 标头,则同样适用)。
【解决方案2】:

扩展 HolyBlackCat 的答案。使用clang 启动和运行的最简单方法是下载Visual Studio(不是代码)并在安装过程中选择以下工具集-

  • 选择“使用 C++ 进行桌面开发”
  • 在“使用 C++ 进行桌面开发”下,还要选择“C++ clang tools for windows”

单击安装,clang 将可以通过命令行使用,就像 CS50 终端一样。除了 cs50 教给您的以外,您通常不必担心使用额外的 cmdline 选项。

用clang-在VS中创建一个C项目-

  • 创建一个空的 C++ 项目(别担心它只是命名 C++,但可以很好地使用 C - 使用 C 编译器 - 而不是 C++ 编译器)

  • 通过右键单击项目名称并单击属性转到项目属性

  • 在项目常规配置中将平台工具集设置为 LLVM - Clang

当然,这不是灵丹妙药,也不能保证与在 linux 上开发相同的体验。但如果您是初学者,您很可能不会注意到任何差异,这是在 windows 上开始使用 C dev 的一种快速简便的方法。

另外请记住,一旦您按照上述步骤安装了 VS + Clang - 您也可以在 VSCode 中编写代码(尽管它可能需要一些配置 - 具体来说,您必须将其指向头文件所在的目录) 并使用带有clang 的终端进行编译。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-29
    • 2015-09-29
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 2013-07-26
    • 1970-01-01
    相关资源
    最近更新 更多