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.
问题是 clang 不在执行环境(Wayback Machine)的搜索路径上。这解释了为什么添加该行env["ENV"]["PATH"] = os.environ["PATH"]可以解决问题。
scan-build要在未修改的系统上运行,SConstruct您可以将 clang 可执行文件(clang++也可能clang)放在执行环境使用的搜索路径上,例如,通过创建一个到 Linux 上的符号/usr/bin/clang++链接/path/to/clang++。