首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在CMake中使用cpplint代码样式检查?

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

Stack Overflow用户
提问于 2018-07-29 17:04:12
回答 4查看 5.6K关注 0票数 4

我找到的唯一在线资源是CMake CMAKE_<LANG>_CPPLINT文档(链接这里)和这个示例(链接这里),但我不知道如何在CMakeLists.txt文件中实际使用它。我试过了所提供的例子,但我无法使它起作用。另外,我安装了cpplint作为解释这里

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

代码语言:javascript
复制
execute_process(COMMAND cpplint path/To/File/To/Analyse.cpp)

不过,我很肯定这并不是正确的做法。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-06-13 11:02:09

使用CMake的静态分析工具的推荐方法在Daniel的“有效Cmake”(=&t=77m13s)中提出。

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

代码语言:javascript
复制
cmake "-DCMAKE_CXX_CPPLINT=cpplint" ..

或者把它放入CMakeLists.txt

代码语言:javascript
复制
set(CMAKE_CXX_CPPLINT "cpplint")

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

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

这种方法的缺点是:

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

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

  • Tidy "-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))。

票数 7
EN

Stack Overflow用户

发布于 2018-10-04 15:59:20

我未能使用CMAKE_<LANG>_CPPLINT检查代码样式。

我是通过使用add_custom_target来实现的。

  1. 下载cpplint.py
  2. 然后下载cpplint.cmake或者自己写。

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

代码语言:javascript
复制
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}
  2. 默认情况下,不依赖于自定义目标,请参阅目标

如果还有什么问题的话,调试您的CMakeLists.txt

票数 1
EN

Stack Overflow用户

发布于 2020-05-08 07:18:04

我一直在努力解决同样的问题。

我用CMake 3.10.2尝试过,user2449761的评论仍然正确。使用set(CMAKE_CXX_CPPLINT "cpplint")仍然不检查任何头文件。

由于aux_source_directory没有列出头文件,所以kgbook的答案不再有效。然而,你可以使用

代码语言:javascript
复制
get_target_property(src staticcodecheck SOURCES)

这会给你所有的非系统头。剩下的可以保持不变。至于在特定时间运行cpplint,您可以尝试

代码语言:javascript
复制
add_custom_command(TARGET ${TARGET}
    PRE_BUILD
...

它将取代add_custom_target(${TARGET_NAME}.在他的cpplint.cmake里。

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51582604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档