Как отфильтровать предупреждения компилятора c ++ по факту - PullRequest
0 голосов
/ 30 апреля 2018

Я регулярно отправляю библиотеки R с компонентом C ++ в стороннее хранилище (CRAN), которое компилирует их на различных платформах и распределяет двоичные файлы среди пользователей. Я не контролирую флаги компилятора, используемые на всех платформах.

Время от времени разные компиляторы на этой платформе находят ошибки в моем коде и предупреждают меня. Однако, когда я просматриваю журналы сборки, они полны повторяющихся предупреждающих сообщений, в основном из библиотек, которые я не контролирую (например, boost по-прежнему поддерживает устаревший auto_ptr). Море предупреждающих сообщений затрудняет поиск фактических ошибок.

Каждое предупреждение содержит список флагов, которые его породили, но каждое предупреждение представляет собой многострочную цепочку (в файле X \ n, включенном из файла Y \ n, включенном из ...), который делает простые решения для фильтрации, такие как 'grep' и 'awk' менее простой.

Как можно проанализировать выходные данные компилятора, чтобы удалить все строки предупреждений, основываясь на построении строк из флага, который их сгенерировал (как [-Wsign-compare] или [-Wdeprecated-auto-ptr]). Таким образом, у меня будут только ошибки компилятора.

В качестве примера приведем одно предупреждение. Вывод содержит тысячи таких предупреждений, каждое из которых имеет разное количество строк. Многострочный характер выходных данных может сделать инструменты фильтрации на основе строк (например, grep, awk) непригодными для фильтрации.

/home/hornik/lib/R/Library/3.6/x86_64-linux-gnu/BH/include/boost/smart_ptr/shared_ptr.hpp:256:65: warning: ‘template<class> class std::auto_ptr’ is deprecated [-Wdeprecated-declarations]
 template< class T, class R > struct sp_enable_if_auto_ptr< std::auto_ptr< T >, R >
                                                                 ^~~~~~~~
In file included from /usr/include/c++/7/bits/locale_conv.h:41:0,
                 from /usr/include/c++/7/locale:43,
                 from /usr/include/c++/7/iomanip:43,
                 from /home/hornik/lib/R/Library/3.6/x86_64-linux-gnu/BH/include/boost/math/policies/error_handling.hpp:12,
                 from /home/hornik/lib/R/Library/3.6/x86_64-linux-gnu/BH/include/boost/math/special_functions/round.hpp:14,
                 from /home/hornik/lib/R/Library/3.6/x86_64-linux-gnu/Boom/include/cpputil/portable_math.hpp:43,
                 from /home/hornik/lib/R/Library/3.6/x86_64-linux-gnu/Boom/include/cpputil/math_utils.hpp:25,
                 from /home/hornik/lib/R/Library/3.6/x86_64-linux-gnu/Boom/include/LinAlg/Vector.hpp:31,
                 from /home/hornik/lib/R/Library/3.6/x86_64-linux-gnu/Boom/include/r_interface/boom_r_tools.hpp:24,
                 from model_manager.h:20,
                 from bsts.cc:20:
/usr/include/c++/7/bits/unique_ptr.h:51:28: note: declared here
   template<typename> class auto_ptr;
                            ^~~~~~~~
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...