使用Clang的扫描构建与scons和C++ 11

chr*_*ock 13 c++ clang scons c++11 scan-build

我已经添加了一切,我$PATH和我调整SConstruct设置适当的环境变量,按照这些答案[ 1,2,3 ].现在我跑的时候

scan-build --use-c++=`which clang++` scons
Run Code Online (Sandbox Code Playgroud)

构建开始,我可以看到分叉的过程scons

/path/to/c++-analyzer ... -std=c++11 ...
Run Code Online (Sandbox Code Playgroud)

目标文件成功构建,但后来出现错误:

could not find clang line
Run Code Online (Sandbox Code Playgroud)

c++-analyzer分叉进程不包含字符串时会发生此错误-cc1.但如果我检查ps aux,我清楚地看到

/path/to/clang -cc1 ...
Run Code Online (Sandbox Code Playgroud)

程序如何正确构建,但静态分析器会失败?


作为参考,如果我手动运行

scan-build clang++ <parameters from scons>
Run Code Online (Sandbox Code Playgroud)

然后构建成功并生成报告!

我也可以通过添加来"欺骗"

env["ENV"]["PATH"] = os.environ["PATH"]
Run Code Online (Sandbox Code Playgroud)

然后跑

CXX="scan-build clang++" scons
Run Code Online (Sandbox Code Playgroud)

我不能scan-build在没有scons修改的情况下自行运行SConstruct.

vit*_*aut 5

问题是 clang 不在执行环境(Wayback Machine)的搜索路径上。这解释了为什么添加该行env["ENV"]["PATH"] = os.environ["PATH"]可以解决问题。

scan-build要在未修改的系统上运行,SConstruct您可以将 clang 可执行文件(clang++也可能clang)放在执行环境使用的搜索路径上,例如,通过创建一个到 Linux 上的符号/usr/bin/clang++链接/path/to/clang++