微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 CMake 中使用 clang tidy

如何解决如何在 CMake 中使用 clang tidy

我想在我的项目中使用 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。