问题标签 [clang-cl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
301 浏览

c++ - 调试可变参数

我目前正在调试我们构建中的一个问题,其中在可变参数中,参数的数量与预期不符。

目前我的代码看起来类似于:

根据这段代码,人们会期望 2 个参数被传递给 Ctor。

令人惊讶的是,此代码在 MSVC 中按预期运行,但在带有 Clang 的 static_assert 上失败。

你们中的任何人都知道强制 clang 揭示它假设可变参数包是什么的技巧吗?

编辑问题与需要抛出的复制构造有关,非常特定于 Clang-Cl

0 投票
2 回答
743 浏览

c++ - 在 clang-cl 中启用 C++ Modules TS

我在 Windows 上通过clang-cl.

我正在尝试让 C++ 模块工作。我已经尝试过 clang 命令行参数-fmodules-ts-fmodules.

我还尝试了msvc命令行参数(在 MSVC 下工作 - 我使用的是 15.8.5)/experimental:module /module:interface(这将是非实验选项的正常方式)。

所有选项都会导致错误clang-cl.exe: warning: unknown argument ignored in clang-cl

任何人都知道是否可以在下面使用 C++ Modules TS clang-cl

0 投票
1 回答
5486 浏览

cmake - 使用 Ninja Generator 为 Windows (clang-cl) 构建 CMake

我正在尝试使用 CMake 作为主要构建工具在 Windows 机器上构建一个简单的应用程序。一旦在项目上调用 CMake,配置阶段就会出错:

我通过网络阅读了很多内容,但任何建议的解决方案都没有解决我的问题。到目前为止,我发现的是一个类似但可能已经过时的相同问题的解决方案,这对我不起作用,因为 Ninja 无法构建可执行文件:

在此错误之前,CMake 配置正确,除了所有编译器 ABI 信息检测失败 - 但 CMake 恢复没有错误。还有一些 其他问题也没有帮助。

官方文档说这很简单,但实际上并非如此。

那么:如何使用带有 Ninja 生成器和 Clang 作为编译器的 CMake 构建一个简单的C++ 项目?我尽量避免安装 Visual Studio,但如果生成的二进制文件与 MSVC 构建二进制文件兼容,那就太好了。

版本:

  • CMake 3.12.2
  • 忍者 1.8.2
  • 铿锵声 7.0.0

示例:这是我正在使用的最小示例:

CMakeLists.txt

主文件

0 投票
1 回答
226 浏览

c++ - 我将什么标志传递给 clang-cl 以获取 time.h、_CSTD、正确的 wint_t 和 mbstate_t?

我正在尝试使用 clang-cl 编译一个大型线性代数包 Trilinos。我配置它

我得到如下所示的错误。我是否需要通过 clang-cl 一些标志才能在包含路径中有 time.h ?让其他类型正确?

谢谢.....约翰卡里

0 投票
1 回答
98 浏览

c++ - QBS 构建系统,无法使用 vcvars64.bat 初始化环境

我正在尝试使用 clang-cl 工具链实现我自己的模块以在 Windows 上构建 C++,因为目前 QBS 中没有内置支持。

我选择使用 lld-link 而不是 microsoft 链接器,因此我必须手动为其提供所有 MS 库包含路径。通过硬编码这些路径,我可以很好地构建我的应用程序。但我想让我的模块更灵活,并使用由|%LIB%设置的环境变量。vcvars32.batvcvars64.bat

据我了解,这可以(应该?)在模块的setupBuildEnvironment脚本中完成。这是我尝试阅读%LIB%并失败的内容:

这给了我LIB =,所以我无处可去。我的猜测是,在查询变量 ( ) 时进程已经终止p.getEnv("LIB"),因此结果为空。QBS 文档Process.getEnv()在这方面没有任何说明。

初始化环境的正确 QBS 方法是vcvars64.bat什么,更广泛地说,获取内部进程环境的正确方法是什么setupBuildEnvironment


[更新] 好吧,尴尬的是,这很容易通过创建一个简单的批处理并完全摆脱setupBuildEnvironment脚本来解决:

但我想尽可能避免批处理脚本,所以问题仍然存在。

0 投票
1 回答
2155 浏览

c++ - clang-cl 和 CMAKE

我尝试在 Windows 上使用 clang 使用 CMAKE 构建简单程序,但 CMAKE 给了我错误。

C:/Program Files/CMake/share/cmake-3.14/Modules/CMakeDetermineCompilerId.cmake:859 处的 CMake 错误(消息):Clang 编译器工具

以 MSVC ABI 为目标,但具有类似 GNU 的命令行界面。这是不支持的。请改用“clang-cl”,例如通过在环境中设置“CXX=clang-cl”。

所以我尝试设置 CXX=clang-cl 环境变量,但它仍然不起作用(相同的错误消息),尽管设置了环境变量

回声%CXX%

铿锵声

所以我的问题是:有没有办法让 CMAKE 在 Windows 上使用 clang-cl 或 clang。

0 投票
2 回答
663 浏览

c++ - 使用 Clang/VS-2019 构建的 MFC/DLL 中缺少 ATL::CStringT 函数

最近在 Visual Studio 2019 中安装了新的 LLVM/clang-cl 工具集,这可能是一个出色的补充!但是,在构建我的 EXE 和 DLL 文件时,我在链接时收到以下错误:

只有在使用“在共享 DLL 中使用 MFC”和在“发布”配置中构建时才会发生这种情况:即,使用“在静态库中使用 MFC”或在“调试”配置中,错误就会消失。

'违规函数在 cstringt.h 标头中使用 _ATL_INSECURE_DEPRECATE("blah blah") 属性定义,但将其重新定义为 'empty' 并不能解决问题。

要重现,请使用新建项目向导在 VS-2019 中创建一个默认的 MFC、基于对话框的应用程序,并在 OnInitDialog() 函数中添加以下内容:

构建为默认检查,然后将“平台工具集”切换到“LLVM(clang-cl)”并重建!您需要在生成的“framework.h”文件末尾注释掉或禁用与清单相关的行:

我在全局标题中尝试了以下#defines,但无济于事:

所以:(1)这是我应该向微软报告的“错误”还是我在做一些愚蠢的事情?(2) 任何人都可以建议一个补丁/修复程序,以便我可以用 clang 真正测试我的 MFC 项目吗?注意:我必须在 DLL 中使用 MFC,因为我依赖扩展 DLL。

0 投票
1 回答
414 浏览

c - 编译 clang 时出现 declspec 错误连同 Windows 标头

我正在尝试在 Windows 上构建我的项目,这对我来说是第一次。我是该平台的初学者。我正在使用 clang-cl 来支持 C11。最初用于注释永远不会返回的函数noreturn的源。<stdnoreturn.h>我在编译时遇到了一大堆 declspec 错误,并尽可能将其缩小到一个微不足道的文件。

要么他们自己构建得很好,但他们一起 产生了一个错误的洗衣清单,所有这些都是完全相同的类型:

__declspec attributes must be an identifier or string literal

所有这些都对同一宏扩展的变化感到不满:

我已经尝试将 -fms-extensions 和 -fms-compatibility 传递给 clang-cl 并且没有骰子。我最好的猜测是,clang 对 Windows 在该 declspec 中添加关键字感到不安?我对任何 MS 扩展都不太了解。

使用普通的旧_Noreturn工作正常,所以我可以编译我的代码。但是有没有人更深入地了解这里发生了什么以及修复是什么?将 msvc 和 clang 结合起来是天生的 janky 还是我做错了什么?

编辑:我是个白痴。

问题是宏扩展_declspec(noreturn)在 Windows SDK 标头内部中断。解决方案很明显:

哪个构建得很好,因为宏是在使用的 Windows SDK 标头之后定义的declspec(noreturn)

0 投票
1 回答
182 浏览

c++ - clang-cl PCH 缺少标头包含错误

我们在编译前生成 PCH 作为预处理步骤,然后强制将 PCH 包含到项目中的每个文件中。这对我们使用 MSVC cl 很好,但 clang-cl 正在检查 PCH 是否包含在源中(设计排除)。

我收到以下错误:

clang-cl 不应该将 /FI(或 /clang:-include)检测为源中的标头吗?

0 投票
1 回答
3926 浏览

c++ - 在带有 LLD 的 Windows 10 上使用 Clang

编译一个简单的 hello world 程序会在使用clang. 我知道 usingclang-cl将摆脱警告。

在 Clang 的网站上,它声明:“clang-cl 是 Clang 的替代命令行界面,旨在与 Visual C++ 编译器 cl.exe 兼容。”

我不想使用 Microsoft Visual C++ 的工具链。我想使用 Clang 作为编译器,使用 LLD 作为链接器。

  • “与 Visual C++ 编译器的兼容性”是什么意思?
  • 我如何知道默认使用哪个链接器?Clang 的文档说默认使用 LLD,但是,如果是这样,那为什么会有警告呢?为什么clang-cl这个警告的推荐解决方案是?

我编译:

并收到警告:

它仍然生成了一个a.exe文件。但是,同样的命令在 Debian 终端(Linux 的 WSL Windows 子系统)中运行时不会生成文件,并且会出现错误。


clang && lld [lld-link]

我尝试编译为目标代码,然后将其传递给 LLD。它导致了一个错误:

  • 这是什么图书馆?它从哪里来的?为什么找不到?

主文件