问题标签 [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.
c++ - 调试可变参数
我目前正在调试我们构建中的一个问题,其中在可变参数中,参数的数量与预期不符。
目前我的代码看起来类似于:
根据这段代码,人们会期望 2 个参数被传递给 Ctor。
令人惊讶的是,此代码在 MSVC 中按预期运行,但在带有 Clang 的 static_assert 上失败。
你们中的任何人都知道强制 clang 揭示它假设可变参数包是什么的技巧吗?
编辑问题与需要抛出的复制构造有关,非常特定于 Clang-Cl
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
?
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
主文件
c++ - 我将什么标志传递给 clang-cl 以获取 time.h、_CSTD、正确的 wint_t 和 mbstate_t?
我正在尝试使用 clang-cl 编译一个大型线性代数包 Trilinos。我配置它
我得到如下所示的错误。我是否需要通过 clang-cl 一些标志才能在包含路径中有 time.h ?让其他类型正确?
谢谢.....约翰卡里
c++ - QBS 构建系统,无法使用 vcvars64.bat 初始化环境
我正在尝试使用 clang-cl 工具链实现我自己的模块以在 Windows 上构建 C++,因为目前 QBS 中没有内置支持。
我选择使用 lld-link 而不是 microsoft 链接器,因此我必须手动为其提供所有 MS 库包含路径。通过硬编码这些路径,我可以很好地构建我的应用程序。但我想让我的模块更灵活,并使用由|%LIB%
设置的环境变量。vcvars32.bat
vcvars64.bat
据我了解,这可以(应该?)在模块的setupBuildEnvironment
脚本中完成。这是我尝试阅读%LIB%
并失败的内容:
这给了我LIB =
,所以我无处可去。我的猜测是,在查询变量 ( ) 时进程已经终止p.getEnv("LIB")
,因此结果为空。QBS 文档Process.getEnv()
在这方面没有任何说明。
初始化环境的正确 QBS 方法是vcvars64.bat
什么,更广泛地说,获取内部进程环境的正确方法是什么setupBuildEnvironment
?
[更新]
好吧,尴尬的是,这很容易通过创建一个简单的批处理并完全摆脱setupBuildEnvironment
脚本来解决:
但我想尽可能避免批处理脚本,所以问题仍然存在。
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。
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。
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)
c++ - clang-cl PCH 缺少标头包含错误
我们在编译前生成 PCH 作为预处理步骤,然后强制将 PCH 包含到项目中的每个文件中。这对我们使用 MSVC cl 很好,但 clang-cl 正在检查 PCH 是否包含在源中(设计排除)。
我收到以下错误:
clang-cl 不应该将 /FI(或 /clang:-include)检测为源中的标头吗?
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。它导致了一个错误:
- 这是什么图书馆?它从哪里来的?为什么找不到?