Я установил clang-tidy в Ubuntu, используя:
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
В зависимости от версии вашего компилятора / clang-tidy стандартная версия C ++ по умолчанию, используемая для компиляции исходных файлов, может отличаться. Стандартной версией Clang по умолчанию является gnu++-98
(или же gnu++-14
начиная с clang 6.0), и обычно clang-tidy имеет те же значения по умолчанию, что и clang.
Я предполагаю, что -std=c++17
(или же -std=c++1z
) не указывается в флагах компилятора C ++, используемых для компиляции ptr.cpp
, поэтому clang-tidy возвращается к значениям по умолчанию -std=gnu++98
и, следовательно, выдает предупреждения для кода C ++ 11.
Для запроса clang-tidy для обработки C ++ 17, вы должны указать -std
помечать как предложено @ n.m., как параметр для -extra-arg
вариант, например:
clang-tidy -p . ptr.cpp -extra-arg=-std=c++17
Редактировать:
поскольку clang++-5.0
используется для компиляции ptr.cpp
, может быть хорошей идеей будет использовать соответствующую версию clang-tidy 5.0 (в Ubuntu 16.04 версия clang-tidy по умолчанию, установленная через apt — 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
Других решений пока нет …