跟踪C++ lib公共API更改

Nat*_*n W 19 c++ api qt

我目前正在研究基于C++ Qt的大型项目,该项目即将在其公共API的重要因素下进行,如果有一个工具可以生成一个报告,该报告已经添加或删除了哪些方法,那将会很不错.构建以构建.

我知道Java有一个工具可以做到这一点,我认为可能有一个用于.NET的工具,但经过一些搜索,我找不到任何适合C++的东西.

是否存在.跨平台会很好,或者只在Linux中也可以.

spr*_*aff 12

如果您使用Doxygen或类似的工具来记录您的API,那么您可以diff使用目录.

  • 无论如何,这是你应该做的事情.
    • (您也可以告诉Doxygen查找未记录的函数.)
  • 您可以轻松地将其应用于古代签到而无需更改任何内容.
  • Doxygen及其同类知识对语言的敏感性privatepublic.
  • 此解决方案可以应用于多种语言,并且不依赖于特定的IDE.
  • 不需要第三方软件(假设您已经有文档生成器).


syn*_*tel 6

检查商业列表底部的apidiff,我认为这将是最接近的匹配.

使用'nm'的建议并不错,你可以运行

nm <binary_or_lib> | c++filt
Run Code Online (Sandbox Code Playgroud)

它会产生一个不错的快照,需要大量的后期处理.

有很多方法可以在这个方面推出自己的方法:

  1. Doxygen可以生成一个XML文件,其中包含您可以用来构建类树的所有类/成员/方法信息.那就是比较树木的问题.一些有用的后处理脚本/实用程序可以在http://www.doxygen.nl/helpers.html找到

  2. 如果您正在使用gcc进行编译,那么埃及是一种使用中间RTL生成调用依赖图的新方法- 似乎使用类似方法生成基本API信息并不困难.

  3. GCC-XML将生成编译代码的XML表示,比Doxygen更低级,因为它提供了编写包装器代码的机制.

  4. cppHeaderParser,一个python模块将生成标题的漂亮的python对象表示,提供生成API映射的简单方法.

  5. ctags生成一个可能被处理的标签数据库.但它有C++命名空间的问题.

一些商业解决方案

  1. scitool的理解在绘制软件方面做得很好,并且有一个用于查询其数据库的perl API.

  2. MagicDraw是一种以UML为中心的重量级工具,但它可以对现有的C++代码库进行逆向工程并生成元信息.

  3. apidiff似乎是一个非常实惠的工具,并且鉴于标准(跨平台,C++)可能是最接近的匹配.