防止 clang-tidy 在生成的文件上运行

问题描述 投票:0回答:2

我们有一个项目,其中包含预编译为 C++ 文件的 protobuf 文件。 不幸的是,这些文件(就像项目中的其他源文件一样)会被 clang-tidy 检查并生成大量警告。

相关的顶级

CMakeLists.txt
声明是:

# For all targets
set(CMAKE_CXX_CLANG_TIDY ${CLANG_TIDY_EXECUTABLE}; --header-filter=.)

# Generated protobufs
include_directories(SYSTEM ${CMAKE_BINARY_DIR}/grpc_interface)

target_link_libraries(${PROJECT_NAME}
    # ...
    grpc_services
)

并且

grpc_interface/CMakeLists.txt
包含:

project(grpc_services)

set(PROTO_IMPORT_DIRS
    ${CMAKE_SOURCE_DIR}/protocols/protobuf/
)

set(PROTOS
    ${CMAKE_SOURCE_DIR}/protocols/protobuf/test_message.proto
)

add_library(${PROJECT_NAME} STATIC ${PROTOS})

target_link_libraries(${PROJECT_NAME}
    PUBLIC
        protobuf::libprotobuf
        gRPC::grpc++
)

get_target_property(GRPC_CPP_PLUGIN gRPC::grpc_cpp_plugin LOCATION)

protobuf_generate(
    TARGET ${PROJECT_NAME}
    IMPORT_DIRS ${PROTO_IMPORT_DIRS}
    LANGUAGE cpp
)

protobuf_generate(
    TARGET ${PROJECT_NAME}
    IMPORT_DIRS ${PROTO_IMPORT_DIRS}
    LANGUAGE grpc
    GENERATE_EXTENSIONS .grpc.pb.h .grpc.pb.cc
    PLUGIN "protoc-gen-grpc=${GRPC_CPP_PLUGIN}"
)

一种选择是将禁用所有警告的

.clang-tidy
文件复制到
${CMAKE_BINARY_DIR}/grpc_interface
目录中,但我认为这仍然会导致解析这些文件的时间损失。

“grpc_services”目标仅包含生成的文件。

是否有更好的方法来禁用该文件夹中的 clang-tidy 处理?

c++ cmake protocol-buffers clang-tidy
2个回答
1
投票

由于“grpc_services”目标仅包含生成的文件,因此您只需将该目标上的

CXX_CLANG_TIDY
目标属性设置为空即可。


0
投票

您可以使用

OUT_VAR
参数来收集生成的文件的列表,然后在这些文件上设置
SKIP_LINTING
属性。这将禁用 clang-tidy 和其他一些可能会抱怨这些文件的 linter。

protobuf_generate(
    TARGET ${PROJECT_NAME}
    IMPORT_DIRS ${PROTO_IMPORT_DIRS}
    LANGUAGE cpp
    OUT_VAR PROTO_GENERATED_FILES
)
set_source_files_properties(${PROTO_GENERATED_FILES}
    PROPERTIES
        SKIP_LINTING ON
)
© www.soinside.com 2019 - 2024. All rights reserved.