如何整合cakey与CMake(<lang> _CLANG_TIDY)和MSVC?

时间:2017-10-18 11:03:29

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

如何通过clang标记,例如-fms-compatibility-version拥有<LANG>_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(除了创建自定义构建目标)?

3 个答案:

答案 0 :(得分: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中。我不知道这是否是正确的方法,但我可以编译并检测错误。对我来说似乎是一场胜利。

答案 1 :(得分:0)

您链接到的docs中实际上是说过的。当前(版本3.13.3)仅适用于Makefile和Ninja。它不适用于msbuild。

答案 2 :(得分:0)

您可以使用--extra-arg--extra-arg-beforedocs)。

-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我所遵循的详细信息)中最困难的部分。