C/C++test两步完成CMake项目静态分析

您可能一直在静态分析中使用CMake。但您是否尝试过将Parasoft C/C++test与CMake一起使用吗?以下是如何使用C/C++test在基于CMake的项目中运行静态分析的详细说明。

CMake是用于构建、测试和打包软件的最流行的工具之一。Parasoft C/C++test通过简化构建管理过程,简化了与基于CMake的项目的集成。项目越大,影响就越明显。

Parasoft团队在为一家大型知名汽车制造商推出测试解决方案期间开发了这些增强功能。我们的目标是在基于自适应AUTOSAR平台的大型复杂项目中引入静态分析和单元测试功能。这些项目由多个静态和动态库以及许多可执行文件组成。

本文将解释如何将Parasoft C/C++test静态分析功能集成到基于CMake的项目中,您可以对单元测试执行同样的操作。

1. 将静态分析集成到基于CMake的项目中

要执行静态代码分析,Parasoft C/C++test等工具需要有关项目构建的信息。通常,所需要的只是编译命令行,用来调用用于分析的文件。

有不同的方法可以把C/C++test集成到构建过程中。不同的构建系统可能需要不同的方法。有了基于CMake的项目,就可以轻松地进行静态分析,并且只需对工作流进行最小的修改。这有助于与C/C++test顺利集成。

CMake脚本可以很容易地配置将编译时信息生成为JSON文件。通常每次构建都会得到一个JSON文件。这个JSON文件包含静态分析器执行代码扫描所需的所有内容。然后在生成构建脚本时创建带有编译命令行的JSON文件。C/C++test可以识别这种格式,并可以直接将其用作执行静态分析的导入文件。

2. 在基于CMake的项目上运行静态分析

在基于CMake的项目上运行静态分析的过程涉及以下步骤:

  • 使用编译命令启用JSON文件的生成。这是一次性活动。

  • 生成构建脚本。这将包括编译信息JSON文件生成。

  • 通过将JSON文件中的编译信息作为静态分析的导入文件来运行静态分析。

2.1 基于CMake的项目静态分析实例

让我们一起看一个在基于CMake的项目上运行静态分析的示例。如果您也有相同的环境,请咨询Parasoft China获取C/C++test试用。

遵循以下步骤

安装后,转到安装目录并进入examples子文件夹。复制Timer示例并进入Timer目录。(这些步骤都是在Linux系统上操作的。)您应该看到以下内容:

图片

准备使用位于主目录中的Makefile文件或使用CMake生成的构建脚本来构建此示例。

在Timer文件夹下面创建一个build文件夹,并且进入到build文件夹下,通过调用CMake脚本来构建Timer项目。

图片

如果我们显示出build目录的内容,我们将看到生成了compile_commands.json文件。

对于下一个示例项目,我们已经启用了生成编译信息JSON文件的功能。

图片

现在,我们准备使用生成的compile_commands.json文件运行静态分析。这个方法最大的一个优点就是,我们可以将.json文件直接用在Parasoft C/C++test命令行界面中:

图片

等待命令执行结束。静态分析就完成了,并且生成了报告。

图片

这种集成方法可以用于持续集成(CI),也可以在开发人员桌面上本地使用。唯一可能需要的修改是启用compile_command.json文件生成的功能。

如何在项目中启用json文件生成功能

如果您的项目中没有启用compile_command.json文件的生成,我们可以用两种方法之一来实现。

方法1:

在CMakeLists.txt文件中,将CMAKE_EXPORT_COMPILE_COMMANDS选项设置为ON。

示例:

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

方法2

在生成构建脚本时,将其添加到cmake的命令行调用中。

示例:

cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 <path to src>

以上这就是将静态分析集成到基于CMake的项目中的全部内容啦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/89003.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ基础(2)——发布订阅/fanout模式 topic模式 rabbitmq回调确认 延迟队列(死信)设计

目录 引出点对点(simple)Work queues 一对多发布订阅/fanout模式以登陆验证码为例pom文件导包application.yml文件rabbitmq的配置生产者生成验证码&#xff0c;发送给交换机消费者消费验证码 topic模式配置类增加配置生产者发送信息进行发送控制台查看 rabbitmq回调确认配置类验…

Redis_缓存1_缓存类型

14.redis缓存 14.1简介 穿透型缓存&#xff1a; 缓存与后端数据交互在一起&#xff0c;对服务端的调用隐藏细节。如果从缓存中可以读到数据&#xff0c;就直接返回&#xff0c;如果读不到&#xff0c;就到数据库中去读取&#xff0c;从数据库中读到数据&#xff0c;也是先更…

制造执行系统(MES)在新能源领域的应用

制造执行系统&#xff08;MES&#xff09;在新能源领域有许多应用&#xff0c;特别是在管理、监控和优化新能源生产过程方面。新能源包括太阳能、风能、生物质能、地热能等。以下是一些MES在新能源方面的应用领域&#xff1a; 生产计划与调度&#xff1a;MES可以协助规划和调度…

谷粒商城第十一天-品牌管理中关联分类

目录 一、总述 二、前端部分 1. 调整查询调用 2. 关联分类 三、后端部分 四、总结 一、总述 之前是在商品的分类管理中直接使用的若依的逆向代码 有下面的几个问题&#xff1a; 1. 表格上面的参数填写之后&#xff0c;都是按照完全匹配进行搜索&#xff0c;没有模糊匹配…

计算机网络—HTTP

这里写目录标题 HTTP是什么HTTP常见状态码HTTP常见字段GET与POST的区别Get和Post是安全和幂等吗PUT幂等&#xff0c;不安全DELETE幂等&#xff0c;不是安全 HTTP缓存技术HTTP缓存实现技术 HTTP1.0优缺点和性能HTTP1.1优缺点和性能HTTP2优缺点和性能HTTP3优缺点和性能HTTP和HTTP…

vuex学习总结

一、vuex工作原理 工作流程&#xff1a;需求&#xff1a;改变组件count的sun变量的值&#xff0c;先调用dispatch函数传入jia函数和要改变的值给actions&#xff08;这个actions里面必须有jia这个函数&#xff09;&#xff1b;actions收到后调用commit函数将jia方法和值传给mut…

做BI领域的ChatGPT,思迈特升级一站式ABI平台

8月8日&#xff0c;以「指标驱动 智能决策」为主题&#xff0c;2023 Smartbi V11系列新品发布会在广州丽思卡尔顿酒店开幕。 ​ 后疫情时代&#xff0c;BI发展趋势的观察与应对 在发布会上&#xff0c;思迈特CEO吴华夫在开场致辞中表示&#xff0c;当前大环境背景下&#xf…

Stable Diffusion教程(9) - AI视频转动漫

配套抖音视频教程&#xff1a;https://v.douyin.com/UfTcrcJ/ 安装mov2mov插件 打开webui点击扩展->从网址安装输入地址&#xff0c;然后点击安装 https://github.com/Scholar01/sd-webui-mov2mov 最后重启webui 下载模型 从国内liblib AI 模型站下载模型 LiblibAI哩…

已有公司将ChatGPT集成到客服中心以增强用户体验

Ozonetel正在利用ChatGPT来改善客户体验。该公司表示&#xff0c;他们通过使用ChatGPT收集与客户互动过程收集的“语料”能够更有针对性地提高服务效率&#xff0c;提供个性化的用户体验&#xff0c;并实现更高的客户满意度。[1] 通过这套解决方案&#xff0c;客服中心将拥有一…

办理流量卡也是有条件的,这五种情况就不能办理流量卡!

流量卡资费虽然便宜&#xff0c;但也不是谁都可以办得&#xff0c;以下这几种情况是办不了的&#xff01; 看到网上的流量卡资费便宜&#xff0c;也想随手申请一张&#xff0c;别想得太简单了&#xff0c;流量卡也不是那么好办理的&#xff0c;换句话来讲&#xff0c;办理流量…

【量化课程】07_量化回测

文章目录 7.1 pandas计算策略评估指标数据准备净值曲线年化收益率波动率最大回撤Alpha系数和Beta系数夏普比率信息比率 7.2 聚宽平台量化回测实践平台介绍策略实现 7.3 Backtrader平台量化回测实践Backtrader简介Backtrader量化回测框架实践 7.4 BigQuant量化框架实战BigQuant简…

特语云用Linux和MCSM面板搭建 我的世界基岩版插件服 教程

Linux系统 用MCSM和DockerWine 搭建 我的世界 LiteLoaderBDS 服务器 Minecraft Bedrock Edition 也就是我的世界基岩版&#xff0c;这是 Minecraft 的另一个版本。Minecraft 基岩版可以运行在 Win10、Android、iOS、XBox、switch。基岩版不能使用 Java 版的服务器&#xff0c;…

Spring BeanPostProcessor 接口的作用和使用

BeanPostProcessor 接口是 Spring 框架中的一个扩展接口&#xff0c;用于在 Spring 容器实例化、配置和初始化 bean 的过程中提供自定义的扩展点。通过实现这个接口&#xff0c;您可以在 bean 实例创建的不同生命周期阶段插入自己的逻辑&#xff0c;从而实现对 bean 行为的定制…

Springboot-Retrofit HTTP工具框架快速使用

在SpringBoot项目直接使用okhttp、httpClient或者RestTemplate发起HTTP请求&#xff0c;既繁琐又不方便统一管理。 因此&#xff0c;在这里推荐一个适用于SpringBoot项目的轻量级HTTP客户端框架retrofit-spring-boot-starter&#xff0c;使用非常简单方便&#xff0c;同时又提供…

【第二阶段】kotlin的函数类型作为返回类型

fun main() {//调用,返回的是一个匿名类型&#xff0c;所以info就是一个匿名函数val infoshow("",0)//info接受的返回值为匿名类型&#xff0c;此时info就是一个匿名函数println(info("kotlin",20)) }//返回类型为一个匿名函数的返回类型fun show(name:Str…

maven如何建立JavaWeb项目并连接数据库,验证登录

这里是建立建立web项目&#xff1a;Maven如何创建Java web项目&#xff08;纯干货版&#xff09;&#xff01;&#xff01;&#xff01;_明天更新的博客-CSDN博客 我们主要演示如何连接数据库验证登录。 1.在webapp目录下创建我们的登录页面&#xff1a;index.jsp 还需要再…

Stable Diffusion+Temporal-kit 半虚半实应用

1.先下载temporal-kit,重启webui 2.下载好ffmpeg,配置好环境,下载Ebsynth 3.准备好你需要的视频,拖到预处理视频位置 4.填写参数,点解保存设置,然后并点击生成,会生成到目标文件夹的input位置 5.然后拉出input文件夹里面你想切换成处理的帧图片,然后填写prompt查看效…

excel操作之向下填充快速操作(序号1->100)

开始-》填充-》序列-》列 步长值为1&#xff0c;终止值为100 如果是日期操作

Linux系统下安装Git软件

环境说明 Linux系统&#xff1a;CentOS 7.9 安装GCC等 JDK版本&#xff1a;jdk-8u202-linux-x64.tar.gz Maven版本&#xff1a;apache-maven-3.8.8-bin.tar.gz 在以上环境下安装Git&#xff08;git-2.41.0.tar.gz&#xff09;软件。 查看是否安装Git软件 查看Git版本&#…

STM32 F103C8T6学习笔记7:双机无线串口通信

今日尝试配通俩个C8T6单片机之间的无线串口通信&#xff0c;文章提供原理&#xff0c;源码&#xff0c;测试效果图&#xff0c;测试工程下载&#xff1a; 目录 传输不规范问题&#xff1a; 串口通信资源&#xff1a; 单个串口资源理解&#xff1a; 单片机串口资源&#xf…