c++ - 使用 Clang 的 scan-build 和 scons 和 C++11

标签 c++ c++11 clang scons scan-build

我已将所有内容添加到我的 $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

我无法使用未修改的 SConstructscons 本身上运行 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/

相关文章:

c++ - 我怎样才能创建 vector 的直方图<vector<long>>

c - 等同于其他编译器中 MSVC 的 _countof?

c++ - 为什么 gcc 和 clang 为我的程序编译成不同的 "const"结果?

c++ - 你能在 lambda 中捕获数组吗?

c++ - 在顶点 C++ 中交换元素

c++ - 封装与结构——这被认为是糟糕的风格吗?

c++ - 如何从命令行启用 'std=c++0x'?

c++ - 位域元素的默认值

c++ - 任何基于 libclang 的 C/C++ 重构工具? (甚至最简单的 "toy example")

c# - C++ inside of C# 通信性能