我想在我的项目中使用 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
。它本质上是运行编译器的前几个阶段来分析代码并查找错误。
正如您所观察到的,设置
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
。