autotools:如何测试需要配置文件的程序?

Posted

技术标签:

【中文标题】autotools:如何测试需要配置文件的程序?【英文标题】:autotools: how to test a program which requires a configuration file? 【发布时间】:2016-11-17 08:27:48 【问题描述】:

假设我有一个 autotools 项目来构建程序 P 和 P 需要一个配置文件 F。例如,想想 P=vim 和 F=~/.vimrc。或 P=bash 和 F=~/.bashrc。 (在我的情况下,P 实际上是一个库)

autotools 提供的测试工具不允许将参数传递给被测程序(除非使用丑陋的包装器...),因此可以将这样的配置文件视为一种解决方法:因此 test1 需要配置文件 F1, test2 需要 F2...

因此某些测试的 Makefile.am 可能如下所示:

#test ttt is linked with program P and will test P

check_PROGRAMS= ttt
ttt_SOURCES = ttt.c
ttt_LDAD = libP.a

TESTS = ttt

EXTRA_DIST = configs/f1.cfg

现在:如何让 P 在测试期间加载文件 configs/F1、configs/F2... 并在安装后仍然加载 ~/.p_rc?

具有此类配置文件的程序非常常见......如何在 autotools 中正确处理?

【问题讨论】:

【参考方案1】:

Automake 通过变量sysconf_DATA 处理配置文件。安装你的包的用户可以通过以下方式配置配置文件的目的地:

sh ./configure --sysconfdir [newpath]

否则,如果不指定,你的配置文件将安装在默认的prefix/etc

至于在测试中使用配置文件,您可以使用变量check_DATA 将配置文件加载到与您的测试二进制文件相同的目录中。

【讨论】:

【参考方案2】:

我会在包含配置文件路径的库代码中设置一个全局变量。这样,对于每个测试用例,我只需将全局变量设置为相关文件的路径即可设置不同的配置文件。

【讨论】:

以上是关于autotools:如何测试需要配置文件的程序?的主要内容,如果未能解决你的问题,请参考以下文章

利用autotool工具编译和安装

如何让 autotools 使用英特尔编译器进行编译?

OpenCV开发环境配置(配人脸识别源码测试)

autotools:强制 make 不重建配置/Makefile

如何在 autotools 项目中传播配置选项?

如何配置 autotools/gcc 以使用绝对路径打印警告和错误?