2

我有以下脚本用于使用 clang 的 scan-build 工具进行静态分析构建:

#!/usr/bin/env bash

export CC=clang
export CXX=clang++
export CCC_CC=$CC
export CCC_CXX=$CXX
mkdir -p static-analysis/build
cd static-analysis/build
cmake -DCMAKE_C_COMPILER=ccc-analyzer -DCMAKE_CXX_COMPILER=c++-analyzer ../..
scan-build -o .. --use-analyzer /usr/local/bin/clang --html-title="craft static analysis" make -j`getconf _NPROCESSORS_ONLN`

该脚本在第一次执行时运行良好,但以下执行在无限循环中给出:

-- Configuring done
You have changed variables that require your cache to be deleted.
Configure will be re-run and you may have to reset some variables.
The following variables have changed:
CMAKE_CXX_COMPILER= c++-analyzer

-- Configuring done
You have changed variables that require your cache to be deleted.
Configure will be re-run and you may have to reset some variables.
The following variables have changed:
CMAKE_CXX_COMPILER= c++-analyzer

.
.
.

我没有更改任何内容,只是删除了整个构建目录以使该 cmake 调用再次工作。此外,调用 justscan-build而不是 cmake 没有问题。

编辑

通过查看整个 cmake 生成的文件,我发现它引用了-DCMAKE_CXX_COMPILER设置的完整路径,我只传递了c++-analyzer,因为它在我的路径上。c++analyzer我怀疑它的完整路径之间存在一些失败的比较。解决方法是在调用 cmake 时使用绝对路径传递-DCMAKE_CXX_COMPILER,以便比较成功。这看起来像一个错误。

4

1 回答 1

1

正如问题编辑中所解释的,解决方法是使用:

cmake -DCMAKE_C_COMPILER=`which ccc-analyzer` \
-DCMAKE_CXX_COMPILER=`which c++-analyzer` ../..
于 2013-06-28T02:25:06.793 回答