2

我正在尝试使用 Parasoft C/C++ Test 通过静态测试检查“编码标准”。我在 Parasoft 用户指南中仅找到“如何在 Makefile 项目中创建 bdf”部分。

如何为每个项目创建一个 bdf?是否必须使用 makefile 项目?

4

2 回答 2

5

感谢您的回答,parasoft 不是一个知名的话题。答案值一块金子。我找不到 cpptesttrace。有cpptest和cpptestscan。他们可以吗?我使用旧版本的 parasoft。

你是对的。'cpptesttrace' 是在 Parasoft C++test 9.4 版(2012 年中)中添加的,因此您很可能使用的是 9.2 或更早版本,其中只有 'cpptestscan' 存在。

顺便说一句,这里是 C++test 独立安装(不是 Visual Studio 插件)中程序的快速解释:

  • cpptest - 启动 C++test GUI(基于 Eclipse),通常用于桌面上的交互工作
  • cpptestcli - 用于自动化静态分析的 C++test 命令行驱动程序,例如作为 Jenkins 作业运行,
  • cpptestscan - 用作编译器命令行的前缀以捕获单个编译信息并将其添加到 BDF 文件中
  • cpptesttrace -(自 Parasoft C++test 9.4 起)用作构建命令行的前缀,以捕获所有编译命令并保存在 BDF 文件中

cpptestscan 和 cpptesttrace 的主要区别在于:

  • cpptestscan 必须预先添加到每个编译命令行。这意味着,cpptestscan 只能捕获单个编译,并一次将一个保存到 BDF 中。这通常通过覆盖 make CC 或 CXX 变量来完成(指定编译器,例如“cpptestscan g++ -c foo.c -o foo.o”)。
  • cpptestrace 本来打算在整个构建命令之前添加一次,它会跟踪由构建命令调用的子进程。识别为编译器调用的所有进程的记录都存储在 BDF 中。

如果 makefile 或构建脚本足够灵活以允许在命令行覆盖编译器,则 cpptestscan 很好,例如

make CXX="cpptestscan g++" CC="cpptestscan gcc"

基于制作的项目通常可以实现。对于自定义或自动生成的构建脚本,所有的赌注都没有了。通常,唯一的选择是修改项目构建脚本,人们通常对此感到紧张。在这种情况下,cpptesttrace 可以提供帮助,因为它完全是非侵入式的,并且可以从几乎任何构建过程中捕获构建信息。

回到这篇文章的原始问题,如果您有多个项目:

  • 使用 cpptestscan,您需要在每个项目的构建脚本中以某种方式为编译器添加前缀 cpptestscan 以创建相应的 BDF
  • 使用 cpptesttrace,您可以为每个项目运行构建,在每个项目的构建命令前面添加 cpptesttrace 以创建相应的 BDF 后者通常更容易,但您需要更新的 C++test(最新版本是 10.3)。

我希望这会有所帮助。顺便说一句:如果您可以升级您的 C++ 测试,请咨询 Parasoft。

于 2017-09-18T09:15:53.407 回答
1

使用 make 文件不是强制性的。Parasoft C++test 有一个名为“ cpptesttrace ”的工具,它监控构建过程并收集编译器调用以创建 BDF 文件。
cpptesttrace 可以与任何构建过程一起使用,无论是 make、shell 脚本,甚至是在 IDE 中构建(如果没有可用的命令行构建,这是最后的手段)。

cpptesttrace 的工作原理:

  • 您只需在原始构建命令行前加上“cpptesttrace”和几个选项,然后运行您的正常构建
  • 确保运行完全重建(例如“make clean all”)以确保 BDF 包含有关属于您的构建的所有源的信息,以及它们是如何编译的
  • cpptesttrace 有一组内置的受支持编译器,您可以通过运行“cpptesttrace --cpptesttraceHelp”查看编译器可执行模式。如果您的 GNU GCC 编译器名称是“不寻常的”,您可以重新定义 cpptesttrace 正在寻找的模式。
  • 如有问题,您可以随时联系 Parasoft 支持

示例 1:

我将给出一个 make 文件示例 :),但它可能是 scons、jam 或 Python 脚本或 .bat:假设,我的完整构建是这样完成的:

 make clean all

我可以使用 cpptesttrace 按如下方式运行构建: cpptesttrace make clean all 这将监控整个构建并从运行中创建一个 BDF 文件。

示例 2:

如果您的构建是带有脚本的多级进程或在此过程中更改文件夹,则最好告诉 cpptesttrace BDF 的绝对位置。扩展上面的例子,我们可以运行:

cpptesttrace --cpptesttraceOutputFile=`pwd`/cpptest.bdf  make clean all

这将确保 BDF 路径是绝对的,无论在哪个源树级别 cpptesttrace 被调用。

于 2017-09-15T12:31:59.543 回答