2013-09-10 2 views
4

Я недавно обнаружил функцию статического анализатора clang ++, и это фантастика, когда я просматриваю свой код с помощью тонкой зубчатой ​​гребенки, чтобы найти скрытые ошибки. Я просто раскомментировать эту строку в моем Makefile:Статический анализатор clang ++ и Makefiles

CXXFLAGS += --analyze -Xanalyzer -analyzer-output=text 

и вуаля, я нахожусь в режиме глубокой ошибки проверки.

Однако одна из незначительных проблем заключается в том, что всякий раз, когда анализатор не обнаруживает каких-либо проблем в конкретном файле .cpp, не создается какой-либо файл .o.

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

... который работает, но поскольку файлы .o не генерируются, make начнет повторный анализ всех файлов .cpp с самого начала, а не только файлы .cpp, которые я фактически изменил с момента предыдущего запуска , Это означает, что я трачу довольно много времени на повторную проверку файлов .cpp, которые не изменились.

Мой вопрос в том, есть ли способ заставить статический анализатор выводить файл .o (он не должен быть допустимым объектным файлом, просто любым файлом с обновленной меткой времени), чтобы Make знал, что «чистый» .cpp-файл не нужно перерабатывать? (т. е. make Make работать так же, как при обычном компиляции)

+0

Я не думаю, что вы действительно хотите создать недействительный объектный файл. Если вы это сделаете, make не восстановит этот файл в качестве реального объектного файла (поскольку его временная метка более новая, чем исходный файл), и ссылка не удастся. – MadScientist

+0

Все было бы в порядке со мной, я просто сделаю «чистым»; make 'для восстановления. По крайней мере, было бы лучше, чем переанализировать (N-1) файлы для повторного анализа N-го. –

+0

Правда, но это кажется ненужным. Почему бы просто не добавить правила для построения анализа в какой-то другой файл, а не в объектный файл? Пока анализ коснется файла SOME, этого будет достаточно, чтобы избежать повторной сборки сборки, и если вы не обходитесь с объектными файлами, вы получаете лучшее из обоих миров. Во всяком случае, я вижу, вы нашли решение, которое работает на вас. – MadScientist

ответ

3

Проверьте clang static analyzer page и получите пакет для загрузки. Вы можете использовать прилагаемый инструмент scan-build, чтобы сделать то, что вы пытаетесь.

Обычный способ использовать это, чтобы избавиться от флагов у вас есть выше, и просто запустите:

$ scan-build make whatever 

И это должно «просто работать». Возможно, вам потребуется передать еще несколько флагов или установить некоторые переменные среды, если вы не используете стандартные имена переменных make.

+1

Это действительно правильный способ сделать это. Благодаря! –

+1

Нет проблем. Удачи! –

Смежные вопросы