首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在CMake和clang-tidy中使用系统头?

如何在CMake和clang-tidy中使用系统头?
EN

Stack Overflow用户
提问于 2020-04-14 05:21:57
回答 1查看 1.4K关注 0票数 2

我试图在我的CMake (3.17.1)项目中使用clang-tidy,但是它在Catch2测试库头上崩溃了。将Catch2设置为系统标头似乎没有什么帮助。为clang-tidy调用的命令包含Catch2的路径作为系统包含目录,但仍会打印其诊断信息。在尝试将其隔离时,我发现这实际上并不适用于clang-tidy:

clang-tidy src.cpp -- -Isystem/Path/to/header

这会导致根本找不到标头。我在某个地方学到的(现在找不到)是让它实际上是clang-tidy的两个--extra-arg参数:

clang-tidy --extra-arg=-Isystem --extra-arg=/Path/to/header src.cpp

然而,这并不是在所有地方都有效。在Windows上,我可以让它工作,但在Linux上,它从来没有以任何形式工作过(在--之后,在一起,分开)。如何在Linux上的clang-tidy中使用-isystem头?这是非常混乱和不一致的。此外,如何使用CMake实现这一点?

我有这个:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.10)
set(CMAKE_CXX_CLANG_TIDY clang-tidy)

add_library(Catch2 STATIC Catch2/Catch2.cpp Catch2/include/Catch2/catch.hpp)
target_include_directories(Catch2 SYSTEM PUBLIC Catch2/include)

add_executable(SomeTest SomeTest/test.cpp)
target_link_libraries(Catch2)

生成的命令行相当复杂(包装是我的可读性设计):

代码语言:javascript
复制
cmake 
-E __run_co_compile 
--tidy="clang-tidy-10;--extra-arg-before=--driver-mode=g++"
--source=../Sometest/test.cpp
-- 
/usr/bin/clang++-10
-isystem ../Catch2/include 
-g
-std=gnu++17
-MD
-MT CMakeFiles/SomeTest.dir/projects/SomeTest/test.cpp.o 
-MF CMakeFiles/SomeTest.dir/projects/SomeTest/FileTest.cpp.o.d 
-o CMakeFiles/SomeTest.dir/projects/SomeTest/test.cpp.o 
-c 
../projects/SomeTest/test.cpp

在输出中,有来自Catch2的警告,因此include中的system似乎被忽略了。我曾尝试通过CMAKE_CXX_CLANG_TIDY属性强制执行--extra-arg

set(CMAKE_CXX_CLANG_TIDY clang-tidy --extra-arg=-isystem --extra-arg=../Catch2/include)

但这似乎也没有起到作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-08 06:43:34

我正在关注LLVM bugtracker上发布的your repro

您做的每件事都是正确的:即,用SYSTEM将Catch2标记为system include。clang-tidy的行为也是正确的:它只检查源文件test.cpp,而不完全检查catch.hpp,只检查宏的扩展。

问题出在Catch2的过时版本上。从Catch2 2.12.2开始,hicpp-vararg警告已被silenced,因此您需要至少更新到该版本。此外,很明显,hicpp-vararg报告的核心问题是fixed,这一变化预计将出现在clang-tidy 11版本中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61196994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档