Я добавил все к своему $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
,
Проблема в том, что Clang не находится на пути поиска в среда исполнения. Это объясняет, почему добавление строки env["ENV"]["PATH"] = os.environ["PATH"]
решает проблему.
Бежать scan-build
на неизмененном SConstruct
можно поставить исполняемый файл clang (clang++
и, возможно, clang
) на пути поиска, используемом средой выполнения, например, создав символическую ссылку из /usr/bin/clang++
на ваш /path/to/clang++
в линуксе
Других решений пока нет …