Решение с использованием флага -cc1
:
Посмотрите, какие включаемые пути получает clang. Флаг -v
является ключевым параметром. Быстрый способ его использования следующий (как указано @Nishant) вместе с образцом включаемых путей, которые он печатает,
$ clang -E -x c - -v < /dev/null
...
#include <...> search starts here:
/usr/local/include
/home/codeman/.itsoflife/local/packages-live/llvm-clang6/build/lib/clang/6.0.1/include
/usr/include/x86_64-linux-gnu
/usr/include
...
На моем компьютере без проблем работает простое использование следующей команды:
$ clang --analyze -Xanalyzer -analyzer-checker=debug.DumpCFG main.c
однако следующая форма не работает, как вы указали,
$ clang -cc1 -analyze -analyzer-checker=debug.DumpCFG main.c
Для этой второй команды (с -cc1
) вы можете создать переменную среды, скажем MY_INCLUDES
, с необходимыми включениями. Вставьте приведенный ниже код (с необходимыми путями включения в соответствии с вашей системой) в ~/.bashrc
или ~/.zshrc
в зависимости от того, используете ли вы bash
или zsh
. (не забудьте source ~/.bashrc
или source ~/.zshrc
)
export MY_INCLUDES="-I/usr/local/include -I/home/codeman/.itsoflife/local/packages-live/llvm-clang6/build/lib/clang/6.0.1/include -I/usr/include/x86_64-linux-gnu -I/usr/include"
Теперь при использовании bash,
$ clang -cc1 $MY_INCLUDES -analyze -analyzer-checker=debug.DumpCFG main.c
по использованию zsh,
$ clang -cc1 ${=MY_INCLUDES} -analyze -analyzer-checker=debug.DumpCFG main.c
Обратите внимание на использование MY_INCLUDES
после -cc1
, но перед файлом main.c
. Более того, на zsh
нужно использовать префикс =
с переменной env, иначе он будет считаться одной строкой (подробности см. В этом ответе).
person
codeman48
schedule
25.12.2018