Подтвердить что ты не робот

Использование 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.

4b9b3361

Ответ 1

Проблема заключается в том, что clang не находится в пути поиска в среде исполнения. Это объясняет, почему добавление строки env["ENV"]["PATH"] = os.environ["PATH"] решает проблему.

Для запуска scan-build в немодифицированном SConstruct вы можете поместить исполняемый файл clang (clang++ и, возможно, clang) в путь поиска, используемый средой выполнения, например. создав символическую ссылку из /usr/bin/clang++ на ваш /path/to/clang++ в Linux.