gpt4 book ai didi

c++ - 防止 clang tidy 报告关于 Boost 测试 header 的警告

转载 作者:行者123 更新时间:2023-12-05 04:31:35 25 4
gpt4 key购买 nike

注意 2022 年 12 月:这个问题似乎已在 clang-tidy 14 中解决。仅通过实验,我可以使用 clang-tidy 11、12 和 13 重现该问题,但不能重现14


我有一个使用 Boost.UnitTest 进行测试的 Cmake 项目。当我使用 clang-tidy 进行静态分析时,它会报告一些来自 Boost.UnitTest header 的警告。我想过滤掉那些。

举个例子(忽略细节)

/usr/include/boost/test/tools/old/interface.hpp:84:45: note: expanded from macro 'BOOST_REQUIRE'
#define BOOST_REQUIRE( P ) BOOST_TEST_TOOL_IMPL( 2, \
^
/usr/include/boost/test/tools/old/interface.hpp:65:5: note: expanded from macro 'BOOST_TEST_TOOL_IMPL'
BOOST_TEST_PASSPOINT(); \
^
/usr/include/boost/test/unit_test_log.hpp:261:5: note: expanded from macro 'BOOST_TEST_PASSPOINT'
::boost::unit_test::unit_test_log.set_checkpoint( \
^
/usr/include/boost/test/unit_test_log.hpp:209:82: note: default parameter was declared here
void set_checkpoint( const_string file, std::size_t line_num, const_string msg = const_string() );
^
/home/user/prj/alf/boost/multi/test/zero_dimensionality.cpp:23:3: error: calling a function that uses a default argument is disallowed [fuchsia-default-arguments-calls,-warnings-as-errors]
BOOST_REQUIRE( num_elements(m1) == 3 );

到目前为止,我使用这些行添加了对 Boost.UnitTest 的依赖

    target_link_libraries(${TEST_EXE} PRIVATE Boost::unit_test_framework Boost::serialization)

我试过这个,使 Boost.UnitTest 成为一个“系统”库,但我仍然收到相同的警告

    target_include_directories(${TEST_EXE} SYSTEM PRIVATE ${Boost_INCLUDE_DIRS})
target_link_libraries(${TEST_EXE} PRIVATE ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY})
target_link_libraries(${TEST_EXE} PRIVATE ${Boost_SERIALIZATION_LIBRARY})

但我仍然得到相同的结果。

如何防止 clang-tidy 检查或报告 Boost header 中的错误?

(我接受更改 clang-tidy 本身配置的答案(我使用了 .clang-tidy 配置文件);尽管更改 CMakeLists 似乎更优雅。 txt 代替。)


补充说明:

按照评论中的一项建议,我禁用了这些与 Boost.Test“不兼容”的警告。我仍然更愿意保留它们并以某种方式使 clang-tidy 过滤器成为 Boost.Test 的 header :

#  -altera-unroll-loops,                                  // BOOST_REQUIRE macro requires this
# -cert-err58-cpp, // BOOST_AUTO_TEST_CASE macro requires this
# -cppcoreguidelines-avoid-non-const-global-variables, // BOOST_AUTO_TEST_CASE macros require this
# -cppcoreguidelines-macro-usage, // BOOST_TEST_MODULE macro requires this
# -cppcoreguidelines-pro-type-vararg, // BOOST_REQUIRE macros require this
# -fuchsia-default-arguments-declarations // BOOST_AUTO_TEST_CASE_TEMPLATE
# -fuchsia-default-arguments-calls, // BOOST_REQUIRE macros require this
# -fuchsia-statically-constructed-objects, // BOOST_AUTO_TEST_CASE creates these
# -hicpp-vararg, // all BOOST_TEST_REQUIRE macros require this

最佳答案

好吧,我(对我)还不是很清楚:

I do CXX=clang++ cmake .. -DCMAKE_CXX_CLANG_TIDY="clang-tidy" (plus a configuration file for clang-tidy)

实际调用 clang-tidy 的方式或时间。显然,它使用了一些我不熟悉的 CMake 魔法。我确实记得曾经看到过这样的东西,但我最终没有使用它是有原因的。

相反,我使用 CMAKE_EXPORT_COMPILE_COMMANDS=On(对于所有基于 libclang 的工具非常方便,然后是一些,如 IDE 和 LSP 服务器)。有了 compile_commands.json 就可以调用 run-clang-tidy 工具并用 -p 指向它。

根据我的经验,它确实过滤了系统应该包含的内容(并且它给出了在详细模式下被抑制的诊断计数)。

关于c++ - 防止 clang tidy 报告关于 Boost 测试 header 的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71815447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com