前言

coding最好要形成一定的编程风格,一般常用的开源风格有google code style,可以使用cpplint工具检查是否符合该编程风格。

目录

1. linux系统使用过程;

2. windows系统使用过程;

注意,目前cpplint.py是基于python2的脚本,若要使用python3请按照python3改写cpplint.py。

操作

1. linux系统使用过程

1.1 安装cpplint;

$pip install cpplint

1.2 保存cpplint.py文件;

1.3 检测单个文件;

cpplint_dir$python2 cpplint.py test.cpp

1.4 检测批量文件;

根据要检测的文件编写shell脚本,然后运行即可。

注意,sh和bat适应于不同的系统,bat文件是window系统的执行文件,sh是linux系统的批处理文件。

cpplint_shell.sh实例;

#! /bin/bash
echo "^@^cpplint code style check through shell====^@^"
index=
config=""
pwd_path=`pwd`
cpplint_path="$pwd_path/cpplint.py"
echo cpplint_path=$cpplint_path src_path="$pwd_path/src"
echo src_path=$src_path
# add file to an array,and check file in array last
# for file in `find $src_path -name "*.h" -type f`
for file in `find $src_path -maxdepth -type f | grep -E "\.h$|\.cc$|\.cu$|\.cpp$"`
do
echo file=$file
echo -e "\033[36m ===> [FILE] \033[0m \033[47;31m $file \033[0m"
check_files[$index]=$file
index=$(($index+))
done
# accroding to config options make a checking command
# first check if python2 exists
check_cmd=""
is_python2_exists=`ls /usr/bin/ | grep -E '^python2$' | wc -l`
if [ $is_python2_exists -ge ]
then
# read cpplint.ini to decide which option to add
for file in ${check_files[*]}
do
check_cmd="python2 $cpplint_path --linelength=80"
echo -e "\033[33m =========== check file $file =============\033[0m"
check_cmd="$check_cmd"$file
eval $check_cmd
echo -e "\033[45m ==========================================\033[0m"
done
fi

运行:

cpplint_dir$sudo bash cpplint_shell.sh

这个脚本是直接在terminal终端打印信息,更进一步,其实可以尝试生成检测报告,也可以尝试将检测信息当成注释放在源文件。

注意,一定要使用bash,被这个问题搞了半天,(# ̄~ ̄#)

这是因为sh和bash的shell解析器版本不一样,版本不同,解析规则有不一样的地方。

使用sh运行的时候出现bad substitution的错误,使用bash就没有问题啦。。。

2. windows系统使用过程

2.1 安装python,注意设置系统环境变量,将python的安装目录写入path环境变量,保存cpplint.py文件;

2.2 运行命令或者脚本文件;

命令行:

cpplint_py_dir$python cpplint.py test.cpp

batch文件:

echo off
python cpplint.py test.cc --output=vs7 > report.txt 2>&1
pause

执行bat文件即可;

2.3 批量检测分析;

步骤:在目录下创建src和reports目录;将要检测的源文件置于src目录;修改batch文件并执行;

echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set suffix=.report.txt
set src_path=src
set reports_path=reports
for %%i in (%src_path%/*.cpp) do (
echo %%i
set report_name=%reports_path%/%%i%suffix%
set src_name=%src_path%/%%i
echo src_name=!src_name!
echo report_name=!report_name!
python cpplint.py !src_name! --counting=toplevel --output=vs7 > !report_name! 2>&1
)
pause

注意,1)等号=两边没有空格等。2)必须在dos下实验目录运行bat文件。3)bat文件是dos下的批处理文件。

运行脚本:

cpplint_py_dir$./cpplint_batch.bat

参考

1. 静态代码分析工具汇总;

2. Google 开源项目风格指南 (中文版);

3. google code style on github;

4. Google代码规范工具Cpplint的使用_fengbingchun_windows;

5. cpplint_github;

6. cpplint使用技巧;

7. windows_batch_process;

8. cpplint_comment_error;

【编程基础】CppLint工具使用过程的更多相关文章

  1. ※编程随笔※=>☆编程基础☆=>※№ SVN工具自动属性 $Author$ $Date$ $Revision$ $URL$ $Header$替换

    TortoiseSVN设置->常规设置->subversion 配置文件 ->编辑 或者 Windows XP 在 C:\Documents and Settings\Adminis ...

  2. 并行计算基础&编程模型与工具

    在当前计算机应用中,对快速并行计算的需求是广泛的,归纳起来,主要有三种类型的应用需求: 计算密集(Computer-Intensive)型应用,如大型科学project计算与数值模拟: 数据密集(Da ...

  3. 老李分享: 并行计算基础&编程模型与工具 1

    老李分享: 并行计算基础&编程模型与工具   在当前计算机应用中,对高速并行计算的需求是广泛的,归纳起来,主要有三种类型的应用需求: 计算密集(Computer-Intensive)型应用,如 ...

  4. 老李分享: 并行计算基础&编程模型与工具

    在当前计算机应用中,对高速并行计算的需求是广泛的,归纳起来,主要有三种类型的应用需求: 计算密集(Computer-Intensive)型应用,如大型科学工程计算与数值模拟: 数据密集(Data-In ...

  5. 老李分享: 并行计算基础&编程模型与工具 2

    2.并行编程模型和工具 – MPI – MPI(Message Passing Interface)是一种消息传递编程模型,服务于进程通信.它不特指某一个对它的实现,而是一种标准和规范的代表,它是一种 ...

  6. LINQ to XML 编程基础

    1.LINQ to XML类 以下的代码演示了如何使用LINQ to XML来快速创建一个xml: 隐藏行号 复制代码 ?创建 XML public static void CreateDocumen ...

  7. C#_GDI+详细教程(图形图像编程基础)

    第7章  C#图形图像编程基础 本章主要介绍使用C#进行图形图像编程基础,其中包括GDI+绘图基础.C#图像处理基础以及简单的图像处理技术. 7.1  GDI+绘图基础 编写图形程序时需要使用GDI( ...

  8. (转)Windows驱动编程基础教程

    版权声明     本书是免费电子书. 作者保留一切权利.但在保证本书完整性(包括版权声明.前言.正文内容.后记.以及作者的信息),并不增删.改变其中任何文字内容的前提下,欢迎任何读者 以任何形式(包括 ...

  9. 操作系统内核Hack:(二)底层编程基础

    操作系统内核Hack:(二)底层编程基础 在<操作系统内核Hack:(一)实验环境搭建>中,我们看到了一个迷你操作系统引导程序.尽管只有不到二十行,然而要完全看懂还是需要不少底层软硬件知识 ...

随机推荐

  1. [React] Write a Custom React Effect Hook

    Similar to writing a custom State Hook, we’ll write our own Effect Hook called useStarWarsQuote, whi ...

  2. C语言定义结构体指针数组并初始化;里面全是结构体的地址

    #include <stdio.h> #include <string.h> struct tells;//声明结构体 struct info { char *infos; } ...

  3. [SCOI2016]妖怪

    嘟嘟嘟 离NOI最后一周,把自己容易忘的知识点和板子复习一下. (刚答完loj的笔试模拟,感觉上不了90--) update:哦,我89-- 先把式子写出来,每一个妖怪的战斗力\(S(i) = A + ...

  4. 洛谷 P1190 接水问题 题解

    P1190 接水问题 题目描述 学校里有一个水房,水房里一共装有 \(m\) 个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为1. 现在有 \(n\) 名同学准备接水,他们的初始接水顺序已经确 ...

  5. P1041 传染病控制——暴力遍历所有相同深度的节点

    P1041 传染病控制 说实话这种暴力我还是头一次见,每次病毒都会往下传染一层: 数据范围小,我们可以直接枚举当前层保护谁就好了: 用vector 记录相同层数的节点:维护已经断了的点: 如果超出最底 ...

  6. Thingsboard Docker关闭后重启服务创建network出错

    因为个人想验证一下thingsboard的数据是否是保存在postgres中,就将postgres容器停止,后想重启则无法重启 我干脆将整个系统删除后重新再来一次,在试的时候发现无法重新创建容器 Cr ...

  7. HttpWebRequest使用时发生阻塞的解决办法

    HttpWebRequest使用如下: 第一种:使用Using 释放资源 /// <summary> /// Http Get请求返回数据 /// </summary> /// ...

  8. MATLAB中 H(b > g) = 2*pi - H(b > g); 作何解

    H(b > g) = 2*pi - H(b > g); %b > g 会得到一个逻辑矩阵,如b=[7,5,6] ;g=[1,2,8],那么b>g会得到[1,1,0]: b< ...

  9. MySQL参数: innodb_flush_log_at_trx_commit和sync_binlog

    innodb_flush_log_at_trx_commit 当innodb_flush_log_at_trx_commit=0时, log buffer将每秒一次地写入log file, 并且log ...

  10. vs2017发布后宕机,没有响应解决方法

    找到项目下:Properties\PublishProfiles 删除:FolderProfile.pubxml.user