如何在Coverity Scan中忽略SWIG/Python生成的CPP文件?
解决Coverity Scan因.gitignore文件触发的git blame失败问题
嘿,我来帮你搞定这个Coverity Scan的问题~你遇到的情况是:Travis上跑Coverity时,它非要去处理被.gitignore排除的SWIG生成文件python/libproj_wrap.cpp,但这个文件根本不在Git仓库里,所以执行git blame直接报错,最后连扫描结果都拿不到对吧?下面给你两个靠谱的解决思路:
思路一:让Coverity直接忽略这个生成文件
Coverity本身支持配置忽略特定文件,这样它就不会再盯着这个生成文件折腾了。具体操作很简单:
- 在项目根目录新建或者编辑
cov-config.yml文件,加这么一段配置:exclude: - python/libproj_wrap.cpp - 然后在Travis里调用Coverity的命令时,指定用这个配置文件,比如:
cov-build --config cov-config.yml --dir cov-int make
这个方法的好处是不用动你原来的SWIG构建流程,项目该怎么生成绑定还怎么来,只是让Coverity别管那个自动生成的文件就行。
思路二:跑Coverity时跳过SWIG绑定生成
另一种更干脆的方式是:既然Coverity扫描的是你维护的代码,那自动生成的文件本来就没必要扫啊!所以可以在Travis执行Coverity任务的时候,跳过生成SWIG绑定的步骤,只构建核心的C++代码。比如在.travis.yml里加个条件判断:
script: - if [ "$COVERITY_SCAN_BRANCH" != 1 ]; then # 正常构建的时候,包含SWIG绑定生成 cmake . && make; else # 跑Coverity扫描时,关掉Python绑定的构建 cmake -DBUILD_PYTHON_BINDINGS=OFF . && make; fi
这个思路的优势很明显:Coverity只扫描你自己写的代码,自动生成的文件本来就没什么分析价值,还能彻底避免git blame的问题,一举两得。
我的推荐
如果python/libproj_wrap.cpp是完全由SWIG自动生成、你平时根本不需要修改的代码,那思路二绝对是首选——毕竟静态分析自动生成的代码意义不大,还浪费资源。要是你确实需要扫描这个生成文件(比如里面有你手动加的逻辑),那再考虑用思路一。
内容的提问来源于stack exchange,提问作者unhammer
相关产品推荐
相关产品推荐

