【问题标题】:How-to integrate clang-tidy with CMake (<LANG>_CLANG_TIDY) and MSVC?如何将 clang-tidy 与 CMake (<LANG>_CLANG_TIDY) 和 MSVC 集成?
【发布时间】:2018-03-30 05:46:28
【问题描述】:

如何传递clang 标志,例如-fms-compatibility-version&lt;LANG&gt;_CLANG_TIDY CMake 属性?在 CLI 上这很简单:

clang-tidy main.cpp -- -fms-compatibility-version=19.10

但是对于 CMake,这不能按预期工作:

-DCMAKE_CXX_CLANG_TIDY="clang-tidy;-checks=-*,readability-*;--;-fms-compatibility-version=19.10"

需要该标志才能使clang 与现代版本的 MSVC 一起使用。

如果这是不可能的;有没有其他方法可以集成 CMake+MSVC+clang-tidy(除了创建自定义构建目标)?

【问题讨论】:

    标签: visual-c++ cmake clang clang-tidy


    【解决方案1】:

    在此处使用 Visual Studio 2017 15.6.3(确保更新)。

    我不得不放

    set(CMAKE_CXX_CLANG_TIDY "clang-tidy;-format-style='file'")
    
    # CMake is buggy. It gives the -std:c++14 instead of /std:c++14
    # set(CMAKE_CXX_STANDARD 14)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++14")
    

    在我的CMakeLists.txt。我不知道这是否是正确的方法,但我可以编译和检测错误。对我来说似乎是一场胜利。

    【讨论】:

      【解决方案2】:

      您可以使用--extra-arg--extra-arg-before (docs)。

      --extra-arg=:附加到编译器命令行的附加参数。可以多次使用。

      --extra-arg-before=:附加到编译器命令行的参数。可以多次使用。

      早期版本的 CMake 支持此功能,但我正在使用它在 Windows 和 linux 上通过 CMake 3.16 获得 C++17 支持。

      if (MSVC)
        if(CLANG_TIDY_EXE)
          set(CMAKE_CXX_CLANG_TIDY "clang-tidy;--extra-arg-before=-std=c++17;${CLANG_TIDY_ARGS}")
        endif()
      endif()
      

      对我来说,这是迄今为止集成 CMake+MSVC+clang-tidy 最困难的部分(here's 我遵循的细节)。

      【讨论】:

        【解决方案3】:

        在您链接到的docs 中实际上已经说过了。目前(版本 3.13.3)它只适用于 Makefiles 和 Ninja。它不适用于 msbuild。

        【讨论】:

        • 我从未说过我使用了 MSBuild CMake 生成器。如果我没记错的话,我使用了带有 Ninja 生成器的 MSVC 15.x 编译器。
        • @FlorianWolters 那就别管我的回答了。我认为它是 msbuild,因为它是 MSVC 的默认设置。
        猜你喜欢
        • 2019-11-26
        • 1970-01-01
        • 2020-07-26
        • 1970-01-01
        • 1970-01-01
        • 2021-02-13
        • 1970-01-01
        • 2018-09-10
        • 2021-09-20
        相关资源
        最近更新 更多