Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用CMake进行cpplint代码样式检查?_Cmake_Cpplint - Fatal编程技术网

如何使用CMake进行cpplint代码样式检查?

如何使用CMake进行cpplint代码样式检查?,cmake,cpplint,Cmake,Cpplint,我找到的唯一在线资源是CMake\uuu CPPLINT(link)上的CMake文档和这个示例(link),但我不知道如何在CMakeLists.txt文件中实际使用它。 我尝试了提供的例子,但我不能使它工作。仅供参考,我已按照说明安装了cpplint 现在,我可以使用以下CMake命令在CMakeLists.txt内运行cpplint python脚本: execute_process(COMMAND cpplint path/To/File/To/Analyse.cpp) 但是,我很确定

我找到的唯一在线资源是
CMake\uuu CPPLINT
(link)上的CMake文档和这个示例(link),但我不知道如何在CMakeLists.txt文件中实际使用它。 我尝试了提供的例子,但我不能使它工作。仅供参考,我已按照说明安装了cpplint

现在,我可以使用以下CMake命令在CMakeLists.txt内运行cpplint python脚本:

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

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

我没有使用
CMAKE\uuu CPPLINT
检查代码样式

我使用
add\u custom\u target
创建它

  • 下载

  • 然后下载或自己写

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

    注:

  • 你应该通过整个列表,所以使用

  • 默认情况下,任何内容都不依赖于自定义目标,请参见


  • 如果仍然存在一些问题,.

    我无法使用
    CMAKE\uuu CPPLINT
    检查代码样式

    我使用
    add\u custom\u target
    创建它

  • 下载

  • 然后下载或自己写

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

    注:

  • 你应该通过整个列表,所以使用

  • 默认情况下,任何内容都不依赖于自定义目标,请参见


  • 如果仍然存在一些问题,.

    丹尼尔·普费弗的《有效的CMake》()中介绍了将静态分析工具用于CMake的推荐方法

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

    cmake "-DCMAKE_CXX_CPPLINT=cpplint" ..
    
    或者将其放入
    CMakeLists.txt

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

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


    这种方法的缺点是:

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

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

    • Clan-Tidy
      “-DCMAKE\u CXX\u CLANG\u Tidy=/usr/bin/CLANG-Tidy-3.9;-checks=*”
    • CppCheck
      “-DCMAKE\u CXX\u CppCheck=/usr/bin/CppCheck;--std=c++11”
    • IWYU
      “-DCMAKE\u CXX\u INCLUDE\u你使用的东西=/usr/bin/IWYU;-可传递的\u仅包括”
    • LWYU
      cmake-DCMAKE\u LINK\u你用什么=真
    • 克拉齐

    其中一些需要“编译数据库”(
    set(CMAKE\u EXPORT\u COMPILE\u COMMANDS ON)
    )。

    Daniel Pffeifer的《有效的CMAKE》()中介绍了将静态分析工具用于CMAKE的推荐方法

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

    cmake "-DCMAKE_CXX_CPPLINT=cpplint" ..
    
    或者将其放入
    CMakeLists.txt

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

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


    这种方法的缺点是:

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

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

    • Clan-Tidy
      “-DCMAKE\u CXX\u CLANG\u Tidy=/usr/bin/CLANG-Tidy-3.9;-checks=*”
    • CppCheck
      “-DCMAKE\u CXX\u CppCheck=/usr/bin/CppCheck;--std=c++11”
    • IWYU
      “-DCMAKE\u CXX\u INCLUDE\u你使用的东西=/usr/bin/IWYU;-可传递的\u仅包括”
    • LWYU
      cmake-DCMAKE\u LINK\u你用什么=真
    • 克拉齐

    其中一些需要“编译数据库”(
    set(CMAKE\u EXPORT\u COMPILE\u命令打开)
    )。

    首先,非常感谢您的提问。我一直在努力解决同样的问题

    我用CMake 3.10.2试过了,用户2449761的评论仍然正确。使用set(CMAKE_CXX_CPPLINT“CPPLINT”)仍然不会检查任何头文件

    kgbook的答案不再有效,因为aux_source_目录没有列出头文件。但是,您可以使用

    get_target_property(src staticcodecheck SOURCES)
    
    这将为您提供所有非系统标题。其余的可以保持不变。至于在特定时间运行cpplint,您可以尝试

    add_custom_command(TARGET ${TARGET}
        PRE_BUILD
    ...
    
    这将替换他的cpplint.cmake中的add_custom_target(${target_NAME}…)


    希望这能有所帮助。

    首先,非常感谢你的提问。我一直在努力解决同样的问题

    我在CMake 3.10.2上试用过,用户2449761的评论仍然正确。使用set(CMake_CXX_CPPLINT“CPPLINT”)仍然不会检查任何头文件

    kgbook的答案不再有效,因为aux_source_目录不列出头文件

    get_target_property(src staticcodecheck SOURCES)
    
    这将为您提供所有非系统标头。其余的可以保持不变。对于在特定时间运行cpplint,您可以尝试

    add_custom_command(TARGET ${TARGET}
        PRE_BUILD
    ...
    
    这将替换他的cpplint.cmake中的add_custom_target(${target_NAME}…)


    希望这有帮助。

    谢谢您的回答。如何确保此自定义目标在所有其他应用程序目标之后运行?谢谢您的回答。如何确保此自定义目标在所有其他应用程序目标之后运行?