gpt4 book ai didi

c++ - 如何使用自动工具将测试单元添加到共享库项目

转载 作者:搜寻专家 更新时间:2023-10-31 01:48:51 28 4
gpt4 key购买 nike

我正在开发一个应该进行大量计算的库。它使用 GNU autotools 构建系统。有一个链接到该库并运行各种测试程序的测试项目。每个过程都会将结果与 MATLAB 的预计算值进行比较。

我发现测试过程既无聊又耗时。每次我需要在库中执行 makesudo make install 和在测试项目中执行 make,然后运行程序,看看发生了什么。

使用自动工具将 check 目标添加到库的标准方法是什么?它应该满足这个要求:

  1. 用户应该能够进行检查并查看结果,而无需安装库本身。可执行文件应链接到最近编译但尚未安装的共享对象。
  2. 运行make check 也应该运行测试程序。 (不仅编译它)。 make check 的结果取决于测试单元程序的返回值。如果测试单元失败,make 应该显示错误。
  3. 如果用户决定不进行检查,则不应编译任何可执行文件。

最佳答案

由于您已经在使用 autotools,因此您已经拥有了大部分基础设施。我不知道目录布局,但假设您有:SUBDIRS = soroush tests 在顶级 Makefile.am 中,或者,您可能在 soroush 目录中有 SUBDIRS = tests。重要的是在进入 tests 目录之前存在一个 libtool 管理的 libsoroush.la

前缀 check_ 表示这些对象,在本例中为 PROGRAM,在运行 make check 之前不应构建。所以在 tests/Makefile.am => check_PROGRAMS = t1 t2 t3

对于每个测试程序,您可以指定:t1_SOURCES = t1.cc 等。作为快捷方式,如果每个测试只有一个源文件,您可以使用AM_DEFAULT_SOURCE_EXT = .cc,这将为您隐式生成源代码。到目前为止:

AM_CPPFLAGS = -I$(srcdir)/.. $(OTHER_CPPFLAGS) # relative path to lib headers.

LDADD = ../soroush/libsoroush.la

check_PROGRAMS = t1 t2 t3
AM_DEFAULT_SOURCE_EXT = .cc

# or: t1_SOURCES = t1.cc, t1_LDADD = ../soroush/libsoroush.la, etc.

make check 将构建但不执行那些程序。为此,您需要添加:

TESTS = $(check_PROGRAMS)

这种方法真正好的地方在于,如果 libsoroush 被构建为共享库,libtool 将负责处理库搜索路径等,使用卸载图书馆。

通常,生成的 t1 程序只是一个设置环境变量的 shell 脚本,因此真正的二进制文件:.libs/t1 可以执行。我只提到这一点,因为使用 libtool 的全部意义在于您无需担心它是如何完成的。


测试反馈更复杂,具体取决于您的需求。您可以一直使用并行测试工具,或者只是简单的通过/失败反馈。除非测试是一个主要瓶颈,或者项目很大,否则使用 simple 会更容易。 (或脚本化)测试。

关于c++ - 如何使用自动工具将测试单元添加到共享库项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17232272/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com