Использование Clang scan-build с помощью scons и С++ 11
Я добавил все к моему $PATH
, и я изменил свой SConstruct
, чтобы установить соответствующие переменные среды, в соответствии с этими ответами [1, 2, 3]. Теперь, когда я запускаю
scan-build --use-c++=`which clang++` scons
начинается сборка, и я вижу, что процесс, раздвоенный scons
, есть
/path/to/c++-analyzer ... -std=c++11 ...
Объектный файл успешно строит, но затем я получаю сообщение об ошибке:
could not find clang line
Эта ошибка возникает в c++-analyzer
, когда разветвленный процесс не содержит строку -cc1
. Но если я проверю ps aux
, я ясно вижу
/path/to/clang -cc1 ...
Каким образом программа могла бы работать правильно, но статический анализатор потерпит неудачу?
Для справки, если я запускаю вручную
scan-build clang++ <parameters from scons>
тогда сборка завершается успешно и создается отчет!
Я также могу "обмануть", добавив
env["ENV"]["PATH"] = os.environ["PATH"]
а затем запустите
CXX="scan-build clang++" scons
Я просто не могу запустить scan-build
на scons
сам с немодифицированным SConstruct
.
Ответы
Ответ 1
Проблема заключается в том, что clang не находится в пути поиска в среде исполнения. Это объясняет, почему добавление строки env["ENV"]["PATH"] = os.environ["PATH"]
решает проблему.
Для запуска scan-build
в немодифицированном SConstruct
вы можете поместить исполняемый файл clang (clang++
и, возможно, clang
) в путь поиска, используемый средой выполнения, например. создав символическую ссылку из /usr/bin/clang++
на ваш /path/to/clang++
в Linux.