0

我试图将 scan-build 与 cmake 一起使用。紧随scan-build make其后scan-build cmake。但是当使用 scan-build 时,它将 CXX 编译器识别为 GNU 9.1.0。但是如果我们不使用 scan-build 它会正确地将 CXX 识别为 clang。由于 CXX 编译器标识为 GNU 9.1.0,因此检查 clang 中的某些诊断标志(例如Wunreachable_code_break, Werror_range_loop_analysis)失败。

输出,同时使用扫描构建:

scan-build: Using '../clang/9.0.0/bin/clang-9' for static analysis
-- The CXX compiler identification is GNU 9.1.0
-- Check for working CXX compiler: ../clang/9.0.0/libexec/c++-analyzer
-- Check for working CXX compiler: ../clang/9.0.0/libexec/c++-analyzer -- works

输出,没有扫描构建:

-- The CXX compiler identification is Clang 9.0.0
-- Check for working CXX compiler: ../clang/9.0.0/bin/clang++
-- Check for working CXX compiler: ../clang/9.0.0/bin/clang++ -- works

如何确保 scan-build 必须将 clang 识别为 CXX 编译器?

4

1 回答 1

1

阅读手册

该脚本使用简单的启发式方法来确定应该使用哪个编译器(在 Darwin 上默认为 clang,在其他平台上默认为 gcc)。

...

scan-build 提供了 --use-cc 和 --use-c++ 选项来硬连线哪个编译器 scan-build 应该用于构建代码。

您需要更改 CMake 配置,以便对 scan-build 的调用看起来像...

scan-build --use-c++ ${CMAKE_CXX_COMPILER} ...
于 2019-10-24T11:56:28.457 回答