如何让clang-tidy按照C++17标准检查Ubuntu环境下的C++代码?
解决clang-tidy未按C++17标准检查代码的问题
我来帮你搞定这个问题~你遇到的情况是因为clang-tidy默认没有自动使用C++17标准,虽然你编译时给clang加了--std=c++17,但clang-tidy并不会自动继承这个设置,所以它用了更老的标准去检查代码,才会出现auto是C11扩展、make_unique未声明的错误。
下面给你几个实用的解决办法:
方法一:直接给clang-tidy指定标准参数
运行clang-tidy时显式加上--std=c++17参数,注意最后要加--来分隔clang-tidy自身的参数和传递给编译器的参数:
clang-tidy --std=c++17 ptr.cpp --
这样clang-tidy就会按照C++17的规则来检查你的代码了。
方法二:通过CMake配置标准(适合项目场景)
如果你的代码是用CMake管理的,可以在CMakeLists.txt里设置C++标准,clang-tidy会自动读取这个配置:
set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON)
之后重新生成编译数据库(比如用cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..),clang-tidy就能自动用C++17标准检查了。
方法三:手动生成编译命令数据库
如果没有用CMake,也可以手动生成compile_commands.json文件,让clang-tidy读取里面的编译参数:
clang++-5.0 --std=c++17 -c ptr.cpp -o ptr.o -MJ compile_commands.json
生成这个文件后,clang-tidy会自动识别其中的--std=c++17设置,不用再手动加参数了。
试一下上面的方法,应该就能解决你的警告和错误啦~
内容的提问来源于stack exchange,提问作者Erel Segal-Halevi
相关产品推荐
相关产品推荐

