在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::cout
和printf
工作。
【讨论】:
你是英雄!非常感谢【参考方案2】:WinMain
是用于 Windows 图形应用程序(带有窗口和菜单等)的自定义 Microsoft 入口函数。默认没有控制台。
如果你想要一个控制台程序,你应该只使用标准的main
函数。
如果您想要一个也有控制台的图形应用程序 (WinMain
),那就有点麻烦了。检查How do I get console output in C++ with a Windows program? 以了解如何实现这一点。
【讨论】:
以上是关于在Windows使用clang编译器的主要内容,如果未能解决你的问题,请参考以下文章
使用 MSVC2015 在 Windows 上进行 clang-tidy
[CMake + MinGW + Windows 10上的Clang
Windows下的Mingw + clang vs Boost:不同类型的错误