标签: clang-cl

在Visual Studio 2017中使用OpenMP 3/4

尝试使用OpenMP 3中的功能

#pragma omp parallel for collapse(2)
Run Code Online (Sandbox Code Playgroud)

在Visual Studio 2017中; 我越来越error c3005: 'collapse' unexpected token encountered on openmp 'parallel for' directive

Visual Studio 2017似乎只支持OpenMP2.在一个支持OpenMP4.5请求中,来自VS团队的说法

我们目前没有计划.

另一个答案说

幸运的是,clang-cl已成为OpenMP 4支持的可行替代方案.在最坏的情况下,您仍然可以启用/ fallback选项.

如何在Visual Studio 2017中使用clang-cl以及什么是后备选项?

c++ openmp clang-cl visual-studio-2017

7
推荐指数
1
解决办法
7332
查看次数

如何规避Windows Universal CRT标头对vcruntime.h的依赖性

在尝试评估Windows上的Clang时,利用Windows通用C运行时(...\Windows Kits\10\Include\10.0.15063.0\ucrt),我立即面临意外的墙,形式是未公开和意外的依赖在微软的Visual Studio上.显然,即使是最简单的C程序也只有在包含任何标准C头时才能编译,因为它们似乎最终都试图#include vcruntime.h(它不是UCRT的一部分).

我的问题是:

  1. 有没有办法在没有Visual Studio的情况下使用Windows Universal C RTL SDK?
  2. 如果它没有意图或可能,为什么它不被称为"Windows CRT for Microsoft VC" - 我错过了什么?

c windows sdk clang-cl universal-crt

7
推荐指数
1
解决办法
992
查看次数

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

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

> cmake -H. -G Ninja -Bbuild -DCMAKE_C_COMPILER:PATH="C:\Program Files\LLVM\bin\clang-cl.exe" -DCMAKE_CXX_COMPILER:PATH="C:\Program Files\LLVM\bin\clang-cl.exe"

-- The C compiler identification is Clang 7.0.0
-- The CXX compiler identification is Clang 7.0.0
-- Check for working C compiler: C:/Program Files/LLVM/bin/clang-cl.exe
-- Check for working C compiler: C:/Program Files/LLVM/bin/clang-cl.exe --broken
CMake Error at C:/Program Files/CMake/share/cmake-3.12/Modules/CMakeTestCCompile
r.cmake:52 (message):
  The C compiler

    "C:/Program Files/LLVM/bin/clang-cl.exe"

  is not able to compile a simple test program.

  It fails with the following output:

    Change Dir: C:/Users/mak/Desktop/cmake-test/build/CMakeFiles/CMakeTmp

    Run …
Run Code Online (Sandbox Code Playgroud)

cmake ninja clang-cl

7
推荐指数
1
解决办法
4681
查看次数

如何在 VS 项目中禁用 clang-cl 特定警告

我使用一个第三方项目,它会产生大量警告。我在 VS 项目属性中禁用了所有这些。有时,我会切换到LLVM clang-cl工具集来检查 clang 发出的警告。第 3 方项目使用 clang-cl 产生如此多的警告,以至于 VS 的输出量令人窒息。我知道如何禁用它们,我通过命令行参数来做到这一点,例如:Wno-int-conversion -Wno-shift-op-parentheses等。但是,问题是,当我切换回 VS 工具集时,所有这些禁用 clang-cl 警告的命令行参数都会变成错误(未知) cmd line args) 与 MS 编译器。

有没有办法在同一个 VS 项目中同时拥有 clang 和 VS 设置?也许,以某种方式以 ClangCL 工具集为条件,只能为 clang-cl 构建添加这些工具集?

visual-studio clang-cl visual-studio-2019

7
推荐指数
1
解决办法
2027
查看次数

clang、std::function 和 -fno-rtti

我正在通过 clang-cl 在 Windows 上使用 Clang 5,并且-fno-rtti在使用std::function.

这是我无法编译的示例:

#include <functional>

void foo(std::function<void()> ra2)
{
}

int main()
{
    auto bar = []()
    {
    };

    foo(bar);

    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

命令行:

clang-cl test.cpp -Xclang -fno-rtti
Run Code Online (Sandbox Code Playgroud)

错误是:

C:\Program Files (x86)\Microsoft Visual Studio\Preview\Community\VC\Tools\MSVC\14.13.26128\include\functional(435,11):  error:
      cannot use typeid with -fno-rtti
                return (typeid(_Callable));
                        ^
Run Code Online (Sandbox Code Playgroud)

这让我感到惊讶,有没有办法std::function在没有 RTTI 的情况下在 Clang 中使用lambdas?该文件说,只有targettarget_typestd::function应该需要RTTI。我可以推出自己的 版本std::function,但不得不这样做似乎很可惜。

如果我将 MSVC 与编译器标志一起使用,它工作正常/GR-

c++ clang c++11 clang-cl

5
推荐指数
1
解决办法
3399
查看次数

如何在 VS2019 CMAKE 中使用 Clang-CL LLVM?

在撰写 clang 时,他们的 Visual Studio 用户手册中有此文档:

cmake -G"Visual Studio 2017" -T LLVM ..
Run Code Online (Sandbox Code Playgroud)

这不起作用。

我从 cmake 收到了一条错误消息:

CMake Error at CMakeLists.txt:3 (project):
  Failed to run MSBuild command:

    C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/MSBuild/Current/Bin/MSBuild.exe

  to get the value of VCTargetsPath:

    Microsoft (R) Build Engine version 16.7.0+b89cb5fde for .NET Framework
    Copyright (C) Microsoft Corporation. All rights reserved.

    Build started 10/3/2020 5:06:06 PM.
    Project "D:\Github\glfw\build\CMakeFiles\3.18.1\VCTargetsPath.vcxproj" on node 1 (default targets).
    C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets(411,5): error MSB8020: The build tools for LLVM99 (Platform Toolset …
Run Code Online (Sandbox Code Playgroud)

cmake visual-studio clang-cl

4
推荐指数
1
解决办法
1384
查看次数

区分 Clang CL 和 MSVC CL

CLang-CL 是 MSVC CL 的直接替代品。

有谁知道如何区分我的代码当前是由 clang-cl 还是 msvc 的 cl 编译的?无需在命令行上传递任何额外定义的宏。

使用

#ifdef _MSC_VER
//.....
#endif
Run Code Online (Sandbox Code Playgroud)

不起作用,两个编译器都定义了_MSC_VER。

此外,在 Linux 上的常规 CLang(Windows 也是如此)中,可以转储clang -dM -E - < /dev/null所有定义的宏。但据我所知, clang-cl 和 msvc-cl 都没有这样的选项来转储所有定义的宏,所以我不知道有什么方法可以查看定义的宏列表中的差异,以便两个编译器找出使用哪个宏来区分这些编译器。

c++ clang visual-c++ clang-cl

3
推荐指数
1
解决办法
1638
查看次数

cmake 将 clang-cl 检测为 clang

我用 cmake 和 msvc 构建了 Boringssl 然后我尝试用 clang-cl 构建所以我在 vmake 参数中使用了 -T"LLVM-vs2014"

Clang-cl 使用 cl 参数,但是 cmake 使用 gcc 样式参数而不添加 -Xclang

c++ cmake clang-cl

2
推荐指数
1
解决办法
1019
查看次数

clang-cl 和 arch:avx2 是否存在兼容性问题?

我使用的是 Windows 10、Visual Studio 2019、平台:x64,并且在单文件 Visual Studio 解决方案中具有以下测试脚本:

#include <iostream>
#include <intrin.h>
using namespace std;

int main() {
    unsigned __int64 mask = 0x0fffffffffffffff; //1152921504606846975;
    unsigned long index;

    _BitScanReverse64(&index, mask);
    if (index != 59) {
        cout << "Fails!" << endl;
        return EXIT_FAILURE;
    }
    else {
        cout << "Success!" << endl;
        return EXIT_SUCCESS;
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的属性解决方案中,我将“启用增强指令集”设置为“高级矢量扩展 2 (/arch:AVX2)”。当使用 msvc 编译(将“平台工具集”设置为“Visual Studio 2019 (v142)”)时,代码返回 EXIT_SUCCESS,但是当使用 clang-cl 编译(将“平台工具集”设置为“LLVM (clang-cl)”)时,我得到退出失败。调试 clang-cl 运行时,index 的值为 4,而它应该是 59。这表明 clang-cl 正在以与 MSVC 相反的方向读取位。

当我将“启用增强指令集”设置为“未设置”时,情况并非如此。在这种情况下,MSVC 和 clang-cl 都返回 EXIT_SUCCESS。

在所有情况下,所有 …

x86-64 visual-c++ avx2 clang-cl

2
推荐指数
1
解决办法
2017
查看次数