我已将所有内容添加到我的 $PATH
中,并根据这些答案调整了我的 SConstruct
以设置适当的环境变量 [ 1 , 2 , 3 ]。现在当我运行时
scan-build --use-c++=`which clang++` scons
构建开始,我可以看到 scons
fork 的进程是
/path/to/c++-analyzer ... -std=c++11 ...
目标文件成功构建,但随后出现错误:
could not find clang line
当派生进程不包含字符串-cc1
时,c++-analyzer
会出现此错误。但是如果我检查 ps aux
,我会清楚地看到
/path/to/clang -cc1 ...
程序怎么会正确构建,但静态分析器会这样失败?
供引用,如果我手动运行
scan-build clang++ <parameters from scons>
然后构建成功并生成报告!
我也可以通过添加“作弊”
env["ENV"]["PATH"] = os.environ["PATH"]
然后运行
CXX="scan-build clang++" scons
我无法使用未修改的 SConstruct
在 scons
本身上运行 scan-build
。
最佳答案
问题是clang不在execution environment (Wayback Machine)的搜索路径上.这解释了为什么添加行 env["ENV"]["PATH"] = os.environ["PATH"]
可以解决问题。
要在未修改的 SConstruct
上运行 scan-build
,您可以将 clang 可执行文件(clang++
和可能的 clang
) 在执行环境使用的搜索路径上,例如通过在 Linux 上创建从 /usr/bin/clang++
到 /path/to/clang++
的符号链接(symbolic link)。
关于c++ - 使用 Clang 的 scan-build 和 scons 和 C++11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13751103/