如何在CMake中使用Clang tidy

问题描述 投票:0回答:1

我想在我的项目中使用 CMake 和 clang-tidy。然而,当我在所有主 CMake 文件中使用它时,我发现构建时间要长得多:

set(CMAKE_CXX_CLANG_TIDY
  clang-tidy-11;
  -format-style='file';
  -header-filter=${CMAKE_CURRENT_SOURCE_DIR};
)

它运行良好,但我不想每次在开发过程中构建项目时都会受到构建时间的影响。因此,我想我应该创建一个单独的目标来构建所有内容,但使用 clang-tidy。当我进行常规调试或发布构建时,它不会进行任何检查。但是我不知道如何在 CMake 中执行此操作。我是否使用命令“cmake --build”以及 CMAKE_CXX_CLANG_TIDY 的 target_set_property 来创建自定义目标?

这感觉相当笨重,那么还有其他方法吗?

cmake clang-tidy
1个回答
13
投票

但是,当我在所有主 cmake 文件中使用它时,我发现构建时间要长得多:

你迟早要支付跑步的费用

clang-tidy
。它本质上是运行编译器的前几个阶段来分析代码并查找错误。

正如您所观察到的,

设置

CMAKE_CXX_CLANG_TIDY
运行
clang-tidy
与您的构建一致。

这感觉相当笨重,所以我的问题是,还有其他方法可以做到这一点吗?

是的。当使用 Ninja 或 Makefile 生成器时,您可以在命令行中设置

-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
。这将在您的构建文件夹中创建一个名为
compile_commands.json
的文件,独立的
clang-tidy
可以读取该文件。

总之,在命令行中,您将手动运行:

$ cmake -G Ninja -S . -B build -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
$ clang-tidy-11 -format-style=file -header-filter=. -p build

-p
标志告诉
clang-tidy
在哪个目录中找到您的
compile_commands.json

© www.soinside.com 2019 - 2024. All rights reserved.