6

如何传递clang标志,例如-fms-compatibility-version使用<LANG>_CLANG_TIDYCMake 属性?在 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(除了创建自定义构建目标)?

4

3 回答 3

0

在 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. 我不知道这是否是正确的方法,但我可以编译和检测错误。对我来说似乎是一场胜利。

于 2018-03-21T17:13:16.250 回答
0

您可以使用--extra-arg--extra-arg-before文档)。

--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 最困难的部分(这是我遵循的细节)。

于 2020-05-10T23:14:48.650 回答
-1

在您链接到的文档中,实际上是这样说的。目前(版本 3.13.3)它仅适用于 Makefiles 和 Ninja。它不适用于 msbuild。

于 2019-01-15T21:47:25.507 回答