9

我的项目中有一个依赖项作为我无法控制的源。我正在使用 cmake 的 clang-tidy 集成来分析我的代码,并且这种依赖会引发很多警告。有没有办法告诉 cmake 不要在特定文件上运行 clang-tidy ?
我试图将文件添加到-line-filterclang-tidy 的选项中,但这不起作用:

set_target_properties(target PROPERTIES
CXX_CLANG_TIDY "${clang_tidy_loc};\
${TIDY_CONFIG} \
-line-filter=\"[\
{\"name\":\"path/to/file.cpp\"},\
{\"name\":\"path/to/file.h\"}\
]\"")

如果该解决方案可以与 cppcheck 等其他静态分析器一起使用,那就太好了。谢谢。

4

2 回答 2

14

如果某些属性(例如CXX_CLANG_TIDY)仅在目标级别上可用,则必须将要对其进行不同设置的文件移动到单独的新目标本身中。

这可以通过使用OBJECT来完成。

在您的情况下,例如:

add_library(
    target_no_static_code_analysis
    OBJECT
        path/to/file.cpp
        path/to/file.h
)

# NOTE: Resetting only needed if you have a global CMAKE_CXX_CLANG_TIDY
set_target_properties(
    target_no_static_code_analysis
    PROPERTIES
         CXX_CLANG_TIDY ""
)

...
add_library(target ${other_srcs} $<TARGET_OBJECTS:target_no_static_code_analysis>)

参考

于 2018-03-31T20:05:23.810 回答
0

如果你有一个只有头文件的库,我使用SYSTEM(也应该可以用于 OBJECT 库)

add_library(
  header_only_library_no_static_code_analysis 
  INTERFACE
)

target_include_directories(
  header_only_library_no_static_code_analysis 
  SYSTEM # Adds -isystem instead of -I and this tells clang-tidy not to analyze these includes
  INTERFACE
    path/to
)

由于以下错误,我很长时间无法使用这种方法

https://bugs.launchpad.net/gcc-arm-embedded/+bug/1698539

但是使用 GNU Arm Embedded Toolchain Version 9-2020-q2-update 似乎已解决 :)

于 2020-11-09T09:21:45.850 回答