我想使用Clang's static analyzer来分析并行代码,即需要MPI编译器包装器的代码。 但是,使用CMake进行配置时,我总是得到
$ scan-build cmake /path/to/source
-- Check for working CXX compiler: /usr/share/clang/scan-build/c++-analyzer
-- Check for working CXX compiler: /usr/share/clang/scan-build/c++-analyzer -- works
并且随后的编译(make
)失败并带有
/usr/include/some/header.hpp:56:17: fatal error: mpi.h: No such file or directory
#include" mpi.h"
如何正确使用scan-build
?
答案 0 :(得分:2)
我还没有找到一种方法直接使用scan-build
使用MPI编译器包装器。但是,您可以绕过包装器并手动将标志提供给编译器。例如这适用于我的环境:
$ export CXXFLAGS=`mpicxx --showme:compile`
$ export LDFLAGS=`mpicxx --showme:link`
$ export CXX=`mpicxx --showme:command`
$ scan-build ./configure && scan-build make #Or your cmake equivalent
--showme:
标志在版本之间似乎略有不同,但mpicc --showme:help
通常会为您提供特定包装器支持的命令列表。
答案 1 :(得分:1)
要调用Clang Static Analyzer,建议使用 用Python实现的scan-build包。你可以使用 脚本包含在LLVM中继中 (
llvm/tools/clang/tools/scan-build-py/bin
)或安装脚本 与pip install scan-build
。请注意,在make install LLVM上复制旧版本 Perl版本的脚本/usr/local/bin
因此可能 覆盖与pip一起安装的版本。由于MPI包装器编译器干扰了扫描构建脚本,因此 建议根据编译数据库调用分析, 由
intercept-build (make|ninja|...)
生成。请注意数据库 由CMake生成的可以与拦截构建生成的不同。 如果compile_commands.json文件表示使用mpicc | mpic ++ 编译器,不会发出任何报告。创建编译数据库后,可以触发分析 用:
analyze-build --enable-checker your.check --use-analyzer /path/to/clang
答案 2 :(得分:0)
你需要为你的c编译器安装一个MPI包装器。这意味着使用CLang编译的MPI库。完成后,您需要在构建环境中将c编译器设置为mpicc。这应该为您提供正确的包含和链接选项。