Joh*_*hny 6 c++ static-analysis cuda clang clang-tidy
存在几种为 C/C++ 设计的静态分析工具,但它们对于测试 CUDA 源并不是特别有用。
由于clang 版本 6能够编译 CUDA,我想检查使用 clang-tidy 的选项,它似乎没有切换架构的选项。
有办法让它发挥作用吗?例如,用于打开 CUDA 解析器的编译时开关、自定义检查形式的扩展,或者可能是计划中的功能?
基于 clang 的工具的问题之一是它们解析文件的方式与 clang 完全相同。
第一个问题是,与 C/C++ 编译不同,CUDA 编译会多次编译源代码。默认情况下,当您向 clang 提供 CUDA 文件时,它会创建多个编译作业,并且这会导致许多只需要一次编译的工具出错。为了解决这个问题,您需要将--cuda-host-only
选项传递给 clang-tidy。
您可能还需要传递,--cuda-path=/path/to/your/CUDA/install/root
以便 clang 可以找到 CUDA 标头。
您可能遇到的另一个问题与包含路径有关。Clang 派生工具没有与 clang 本身使用的相同的默认包含路径,这偶尔会导致奇怪的问题。至少 clang-tidy 需要找到__clang_cuda_runtime_wrapper.h
哪个与 clang 一起安装。如果运行它,clang-tidy your-file.c -- -v
它将打印 clang 的参数并包括它使用的搜索路径。将其与clang -x c /dev/null -fsyntax-only -v
打印内容进行比较。您可能需要提供clang-tidy
额外的包含路径以匹配clang
其自身使用的路径。请注意,您不应在此处显式添加 CUDA 包含的路径。它将自动添加到正确的位置--cuda-path=...
。
一旦一切就绪,clang-tidy 就应该可以处理 CUDA 文件了。
像这样的东西:
clang-tidy your-file.cu -- --cuda-host-only --cuda-path=... -isystem /clang/includes -isystem /extra/system/includes
归档时间: |
|
查看次数: |
1661 次 |
最近记录: |