Вывод CppCheck в xml-файл из Powershell

Я хотел бы запустить CppCheck для нашего кода как часть нашей сборки. Тем не менее, я не могу сохранить его в файл, если он не выполняется из командной строки.

Из обычной командной строки (windows) или с жестко запрограммированными путями внутри.bat-файла работает следующее:

"C:\Program Files\Cppcheck\CppCheck.exe" --enable=all  --xml-version=2 "<full_path_with_spaces_to_source>" 2> cppcheck_result.xml

Тем не менее, я хотел бы запустить его из сценария, например, Powershell. Я попробовал это:

& 'C:\Program Files (x86)\Cppcheck\cppcheck.exe' --enable=all --xml-version=2 $CheckPath | Out-File cppcheck_ps.xml

Но это объединяет файлы, отмеченные в файле xml, и результаты xml отображаются на панели вывода Powershell.

Я также попытался запустить exe-файл непосредственно с нашего сервера сборки (TeamCity) в качестве шага сборки из командной строки, но выходной файл не был создан! Проверка выполняется, и нормальный вывод отображается в журнале сборки, но как-то теряется 2>. Я использую TeamCity версии 7.1.1.

Я искал везде, о чем мог думать, и самым близким, что я мог найти, было Это.

Но это не сработало для меня, поэтому любая помощь будет принята с благодарностью.

В качестве альтернативы, если вы знаете лучший способ запустить CppCheck и получить результаты, пожалуйста, дайте мне знать.

2 ответа

Решение

У меня нет этого инструмента, но если вам нужно извлечь из него stderr, попробуйте:

& '.\cppcheck.exe' --enable=all --xml-version=2 $CheckPath 2>&1 | Out-File cppcheck_ps.xml

Примечание. Я удалил полный путь к файлу exe только для сокращения команды для отображения.

Я ничего не знаю о том, как работает powershell. Но если вам нужно использовать 2>&1 вместо 2>, то вы, конечно, тоже получите сообщения stdout. Но вы можете использовать флаг cppcheck --quiet или -q, чтобы пропустить вывод stdout.

Другие вопросы по тегам