如何将clang-tidy与CMake(< LANG>_CLANG_TIDY)和MSVC集成?

vm0i2vca  于 2022-12-18  发布在  其他
关注(0)|答案(4)|浏览(214)

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

jtoj6r0c

jtoj6r0c1#

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

ddrv8njm

ddrv8njm2#

您可以使用--extra-arg--extra-arg-beforedocs)。
--额外参数=:附加到编译器命令行的参数。可以多次使用。
--之前的额外参数=:附加参数附加到编译器命令行。可以多次使用。
这在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最困难的部分(下面是我遵循的细节)。

m1m5dgzv

m1m5dgzv3#

CMAKE_CXX_CLANG_TIDY in MSVC在本主题中,VS_GLOBAL_ClangTidyChecks属性可能有效。

jfewjypa

jfewjypa4#

在你链接到的docs中,实际上是这样说的。目前(3.13.3版)它只适用于Makefile和Ninja。它不适用于msbuild。

相关问题