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 похоже решено:)