【问题标题】:clang-tidy cmake exclude file from checkclang-tidy cmake 从检查中排除文件
【发布时间】:2018-09-10 12:30:08
【问题描述】:

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

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 等其他静态分析器一起使用,那就太好了。 谢谢。

【问题讨论】:

    标签: cmake static-analysis cppcheck clang-tidy


    【解决方案1】:

    如果某些属性(如 CXX_CLANG_TIDY)仅在目标级别可用,您必须将您想要为其设置不同设置的文件移动到单独的新目标本身。

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

    在你的情况下是这样的:

    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>)
    

    参考文献

    【讨论】:

    • 我昨天没想到,但现在这似乎很明显。感谢您提供清晰且有据可查的答案,如果它是一个依赖项,它应该已经是一个不同的目标......
    • 通过这个答案了解了 OBJECT 库。谢谢!
    【解决方案2】:

    如果你有一个只有头文件的库,我会使用 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 似乎已解决 :)

    猜你喜欢
    • 1970-01-01
    • 2020-04-08
    • 2019-10-01
    • 2020-06-28
    • 2017-01-05
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多