如何通过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(除了创建自定义构建目标)?
答案 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-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我所遵循的详细信息)中最困难的部分。