clang-tidy cmake исключить файл из проверки

У меня есть источник в моем проекте, который я не могу контролировать. Я использую интеграцию cmag-tidy в cmake для анализа своего кода, и эта зависимость запускает МНОГО предупреждений. Есть ли способ сказать cmake не запускать clang-tidy для определенных файлов?
Я пытался добавить файлы в -line-filter опция clang-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, было бы очень хорошо. Благодарю.

1 ответ

Решение

Если какое-то свойство - как 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>)

Рекомендации

Если у вас есть библиотека только для заголовков, я использую 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 похоже решено:)

Другие вопросы по тегам