14

根据这些答案 [ 1 , 2 , 3 ] ,我已将所有内容添加到 my$PATH并调整了 my以设置适当的环境变量。现在当我跑SConstruct

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.

4

2 回答 2

4

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

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

于 2013-12-20T16:15:46.210 回答
1

我遇到了同样的问题:目标文件成功构建,但随后出现错误:

could not find clang line

问题是我使用的标志对有效gcc但对clang.

touch empty.c

scan-build gcc -fdiagnostics-show-caret -c empty.c
scan-build: Using '/usr/bin/clang-8.exe' for static analysis
could not find clang line
...

scan-build --use-cc=clang gcc -fdiagnostics-show-caret -c empty.c
scan-build: Using '/usr/bin/clang-8.exe' for static analysis
clang-8: error: unknown argument: '-fdiagnostics-show-caret'
...

删除-fdiagnostics-show-caret使问题消失:

scan-build gcc -c empty.c
scan-build: Using '/usr/bin/clang-8.exe' for static analysis
...

另外,为了搅浑水,clang这个开关的名字是-fcaret-diagnosticsgcc不接受。

于 2021-05-31T17:15:13.490 回答