我在Ubuntu上使用以下命令安装了clang-tidy:
sudo apt install clang-tidy我在一个简单的C++ 17文件上运行它,得到一个警告和错误:
/home/erelsgl/Dropbox/ariel/CPLUSPLUS/intro/01-single-file/ptr.cpp:17:3: warning: 'auto' type specifier is a C++11 extension [clang-diagnostic-c++11-extensions]
auto i = make_unique<int>();
^
/home/erelsgl/Dropbox/ariel/CPLUSPLUS/intro/01-single-file/ptr.cpp:17:12: error: use of undeclared identifier 'make_unique' [clang-diagnostic-error]
auto i = make_unique<int>();如何告诉clang-tidy根据c++17标准检查此文件?
注意:为了构建程序,我运行:
clang++-5.0 --std=c++17 ptr.cpp发布于 2018-01-24 03:35:56
根据您的编译器/ clang-tidy版本的不同,用于编译源文件的默认C++标准版本可能会有所不同。clang的默认标准版本是gnu++-98 (或从clang6.0开始的gnu++-14 ),通常clang-tidy具有与clang相同的默认设置。
我猜想-std=c++17 (或-std=c++1z)没有在用于编译ptr.cpp的C++编译器标志中指定,所以clang-tidy会退回到默认的-std=gnu++98,因此会给出C++11代码的警告。
为了让clang-tidy处理C++17,您应该按照@n.m.的建议将-std标志指定为-extra-arg选项的参数,例如:
clang-tidy -p . ptr.cpp -extra-arg=-std=c++17
编辑:
由于clang++-5.0用于编译ptr.cpp,因此最好使用匹配的clang-tidy版本5.0 (在Ubuntu16.04上,通过apt安装的默认clang-tidy版本是3.8),即:
clang-tidy-5.0 -p . ptr.cpp -extra-arg=-std=c++17
如果尚未安装,您可以从以下位置获取它:
https://www.ubuntuupdates.org/package/xorg-edgers/xenial/main/base/clang-tidy-5.0
https://stackoverflow.com/questions/48404289
复制相似问题