如何在 CMake 中使用 cpplint 代码样式检查?

Pin*_*ise 2 cmake cpplint

我找到的唯一在线资源是有关CMAKE_<LANG>_CPPLINT此处链接)和此示例(此处链接)的 CMake 文档,但我无法弄清楚如何在 CMakeLists.txt 文件中实际使用它。我尝试了提供的示例,但无法使其正常工作。仅供参考,我按照此处的说明安装了 cpplint 。

到目前为止,我可以使用以下 CMake 命令在 CMakeLists.txt 中运行 cpplint python 脚本:

execute_process(COMMAND cpplint path/To/File/To/Analyse.cpp)
Run Code Online (Sandbox Code Playgroud)

但是,我很确定这不是执行此操作的正确方法。

use*_*761 6

Daniel Pffeifer 的“Effective Cmake”(https://www.youtube.com/watch?v=rLopVhns4Zs&=&t=77m13s)中介绍了在 CMake 中使用静态分析工具的推荐方法。

您可以在调用时定义它cmake,例如:

cmake "-DCMAKE_CXX_CPPLINT=cpplint" ..
Run Code Online (Sandbox Code Playgroud)

或将其放入CMakeLists.txt

set(CMAKE_CXX_CPPLINT "cpplint")
Run Code Online (Sandbox Code Playgroud)

推荐的选项是第一个(我们不应该在项目中定义什么不是项目要求)。

CMake 将调用cpplint它编译的每个文件。您可以在分号后传递额外的参数(例如-DCMAKE_CXX_CPPLINT=cpplint;--linelength=100)。


这种方法的缺点:

  1. 错误计数不会累积(因为cpplint分别为每个文件调用)。
  2. 它不会检查头文件(与 D. Pffeifer 在他的演示文稿中所说的相反,包含文件不会被 扫描cpplint)。

请注意,您可以以相同的方式使用其他静态分析工具:

  • 氏族整洁 "-DCMAKE_CXX_CLANG_TIDY=/usr/bin/clang-tidy-3.9;-checks=*"
  • Cpp检查 "-DCMAKE_CXX_CPPCHECK=/usr/bin/cppcheck;--std=c++11"
  • 国际友人联盟 "-DCMAKE_CXX_INCLUDE_WHAT_YOU_USE=/usr/bin/iwyu;--transitive_includes_only"
  • 刘宇 cmake -DCMAKE_LINK_WHAT_YOU_USE=TRUE
  • 疯子

其中一些将需要“编译数据库”( set(CMAKE_EXPORT_COMPILE_COMMANDS ON))。