如何将 Clang-CL LLVM 与 VS2019 CMAKE 一起使用?

How to use Clang-CL LLVM with VS2019 CMAKE?

在撰写本文时,clang 在其 Visual Studio 的用户手册中包含此文档:

cmake -G"Visual Studio 2017" -T LLVM ..

这行不通。

我从 c​​make 收到了一堆错误消息:

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.18.1\VCTargetsPath.vcxproj" on node 1 (default targets).
    C:\Program Files (x86)\Microsoft Visual Studio19\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets(411,5): error MSB8020: The build tools for LLVM99 (Platform Toolset = 'LLVM99') cannot be found. To build using the LLVM99 build tools, please install LLVM99 build tools.  Alternatively, you may upgrade to the current Visual Studio tools by selecting the Project menu or right-click the solution, and then selecting "Retarget solution". [D:\Github\glfw\build\CMakeFiles.18.1\VCTargetsPath.vcxproj]
    Done Building Project "D:\Github\glfw\build\CMakeFiles.18.1\VCTargetsPath.vcxproj" (default targets) -- FAILED.

    Build FAILED.

    "D:\Github\glfw\build\CMakeFiles.18.1\VCTargetsPath.vcxproj" (default target) (1) ->
    (PrepareForBuild target) ->
on, and then selecting "Retarget solution". [D:\Github\glfw\build\CMakeFiles.18.1\VCTargetsPath.vcxproj]

        0 Warning(s)
        1 Error(s)

    Time Elapsed 00:00:00.11


  Exit code: 1



-- Configuring incomplete, errors occurred!
See also "D:/Github/glfw/build/CMakeFiles/CMakeOutput.log".

这不适用于 VS2019。在 vs2019 中,您必须将工具集指定为 ClangCL。 据我所知,此更改未在任何地方记录。 我只能通过反复试验来解决这个问题。

cmake -G"Visual Studio 2019" -T ClangCL ..

这是您将获得的输出。

PS D:\Github\glfw> cmake -S . -B build -T ClangCl
-- Building for: Visual Studio 16 2019
-- Selecting Windows SDK version 10.0.18362.0 to target Windows 10.0.19041.
-- The C compiler identification is Clang 10.0.0 with MSVC-like command-line
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/Llvm/x64/bin/clang-cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Looking for pthread.h
-- Looking for pthread.h - not found
-- Found Threads: TRUE  
-- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE) 
-- Using Win32 for window creation
-- Configuring done
-- Generating done
-- Build files have been written to: D:/Github/glfw/build

这是它的样子:

编辑:

您也可以像这样手动设置工具集:

# Must be called before project call
set(CMAKE_GENERATOR_TOOLSET "ClangCL")

project(FOOBAR
    LANGUAGES "CXX"
)

https://cmake.org/cmake/help/v3.18/manual/cmake.1.html

中所述
-T <toolset-spec>

    Toolset specification for the generator, if supported.

Visual 2017 不支持 Clang/LLVM:
https://docs.microsoft.com/cpp/build/clang-support-msbuild?view=vs-2017

对于视觉 2019,您需要使用 clang-clhttps://docs.microsoft.com/cpp/build/clang-support-msbuild?view=vs-2019.

如果您想查看支持的生成器:
https://cmake.org/cmake/help/v3.18/manual/cmake-generators.7.html

如果来到这里的人是 CMake 的新手...

我使用 CLion 并下载了 Visual Studio command-line 工具。 我 运行 在 Windows 上构建我的项目的命令是:

cmake -DCMAKE_BUILD_TYPE=Release \
-G"Visual Studio 17 2022" \
-T ClangCL \
-DCMAKE_C_COMPILER="C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/Llvm/x64/bin/clang-cl.exe" \
-DCMAKE_CXX_COMPILER="C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/Llvm/x64/bin/clang-cl.exe" \
-S ./build