问题描述
我想在我的项目中使用 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_CXX_CLANG_TIDY 的 target_set_property 的命令“cmake --build”创建自定义目标?
这感觉很笨重,所以我的问题是,还有其他方法可以做到这一点吗?
解决方法
但是,当我在所有主 cmake 文件中使用它时,我发现构建时间要长得多:
您将不得不支付运行 {
"name": "shipdemo","version": "0.0.1","private": true,"scripts": {
"android": "react-native run-android","ios": "react-native run-ios","start": "react-native start --reset-cache","test": "jest","lint": "eslint .","web": "webpack serve -d source-map --mode development --config \"./web/webpack.config.js\" --inline --color --hot","build:web": "webpack --mode production --config \"./web/webpack.config.js\" --hot"
},"dependencies": {
"react": "17.0.1","react-dom": "^17.0.2","react-native": "0.64.2","react-native-web": "^0.16.5"
},"devDependencies": {
"@babel/core": "^7.12.9","@babel/runtime": "^7.12.5","@react-native-community/eslint-config": "^2.0.0","babel-jest": "^26.6.3","babel-loader": "^8.2.2","babel-plugin-module-resolver": "^4.1.0","babel-plugin-react-native-web": "^0.16.5","eslint": "7.14.0","jest": "^26.6.3","metro-react-native-babel-preset": "^0.64.0","react-test-renderer": "17.0.1","url-loader": "^4.1.1","webpack": "^5.39.0","webpack-cli": "^4.7.2","webpack-dev-server": "^3.11.2"
},"jest": {
"preset": "react-native-web"
}
}
的费用。它本质上是运行编译器的前几个阶段来分析您的代码并查找错误。
如您所见,设置 clang-tidy
会根据您的构建运行 CMAKE_CXX_CLANG_TIDY
。
这感觉很笨重,所以我的问题是,还有其他方法可以做到这一点吗?
是的。使用 Ninja 或 Makefile 生成器时,您可以在命令行中设置 clang-tidy
。这将在您的构建文件夹中创建一个名为 -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
。