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

时间:2018-07-29 17:04:13

标签: cmake cpplint

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

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

execute_process(COMMAND cpplint path/To/File/To/Analyse.cpp)

但是,我很确定这不是正确的方法。

2 个答案:

答案 0 :(得分:0)

我无法使用CMAKE_<LANG>_CPPLINT来检查代码样式。

我使用add_custom_target做到了。

  1. 下载cpplint.py

  2. 然后下载cpplint.cmake或自行编写。

假设您的项目中有一个名为 src 的源代码目录,请将这些语句编码到您的 CMakeLists.txt 中。

aux_source_directory(${CMAKE_SOURCE_DIR}/src src)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}) #I put cpplint.cmake in $CMAKE_SOURCE_DIR
include(cpplint)

add_style_check_target(phoenix-cpplint "${src}") 

注意:

  1. 您应该传递整个列表,所以请使用"${src}" instead of ${src}

  2. 默认情况下,任何内容都不取决于自定义目标,请参见add_custom_target

如果仍有问题,请debug your CMakeLists.txt

答案 1 :(得分:0)

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

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

cmake "-DCMAKE_CXX_CPPLINT=cpplint" ..

或将其放入CMakeLists.txt

set(CMAKE_CXX_CPPLINT "cpplint")

推荐选项是第一个(我们不应在项目中定义非项目要求的内容)。

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=*"
  • CppCheck "-DCMAKE_CXX_CPPCHECK=/usr/bin/cppcheck;--std=c++11"
  • IWYU "-DCMAKE_CXX_INCLUDE_WHAT_YOU_USE=/usr/bin/iwyu;--transitive_includes_only"
  • LWYU cmake -DCMAKE_LINK_WHAT_YOU_USE=TRUE
  • 懒散

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