在Windows使用clang编译器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Windows使用clang编译器相关的知识,希望对你有一定的参考价值。

参考技术A 从VS2019 16.2开始,有了一种更方便的在Windows里使用clang的方法:vs自带了llvm(clang),不在需要各种手动安装和项目配置了。

在vs installer中,选中clang

在项目配置里,配置一下,即可。

详见 Clang/LLVM support in Visual Studio projects | Microsoft Docs

在控制台中看不到 Windows 程序的标准输出(在 Windows 上使用 Clang 编译)

【中文标题】在控制台中看不到 Windows 程序的标准输出(在 Windows 上使用 Clang 编译)【英文标题】:Can't see Windows program's stdout in console (compiled with Clang on Windows) 【发布时间】:2019-04-01 15:07:12 【问题描述】:

当我使用 clang 构建一个简单的控制台应用程序时,它运行良好:

void main() puts("HELLO");

但是当我使用WinMain 创建一个 Windows 应用程序时,我看不到标准输出。

必须有一个标志来修复它,比如 MinGW 的-mconsole

【问题讨论】:

您可以使用以下命令打开控制台窗口:AllocConsole() Clang 只是编译器,它是确定您的目标子系统的链接器。所以你必须告诉我们你使用的是什么链接器。 @HansPassant clang 使用 link.exe 到目前为止,我在 GUI 应用程序中使用普通的 main 函数也从未遇到过问题。我不会使用 WinMain,不管 MS 家伙说什么...... 【参考方案1】:

其他 GUI 应用程序的快速标准输出启用器:

if (AllocConsole())

    FILE* fi = 0;
    freopen_s(&fi, "CONOUT$", "w", stdout);

然后std::coutprintf 工作。

【讨论】:

你是英雄!非常感谢【参考方案2】:

WinMain 是用于 Windows 图形应用程序(带有窗口和菜单等)的自定义 Microsoft 入口函数。默认没有控制台。

如果你想要一个控制台程序,你应该只使用标准的main 函数。

如果您想要一个也有控制台的图形应用程序 (WinMain),那就有点麻烦了。检查How do I get console output in C++ with a Windows program? 以了解如何实现这一点。

【讨论】:

以上是关于在Windows使用clang编译器的主要内容,如果未能解决你的问题,请参考以下文章

让 Clang 在 Windows 上工作

使用 MSVC2015 在 Windows 上进行 clang-tidy

[CMake + MinGW + Windows 10上的Clang

Windows下的Mingw + clang vs Boost:不同类型的错误

在 Windows 上使用 Clang 链接 SDL2 时出错“LNK1561:必须定义入口点”

在 Windows 上使用 -faddress-sanitizer 进行 Clang