使用 Automake 进行单元测试
Unit tests using Automake
我正在与团队中的其他人一起使用 GNU autotools 在一个项目中工作。在项目中,我们对每个非平凡的 C++ class 使用单元测试。我发现有对单元测试的支持。为此,我使用了这个结构:
./
+ tests/
+ Makefile.am
+ classA_test.cc
....
+ classB_test.cc
+ src/
+ lib/
+ Makefile.am
问题来了,因为我的主要 Makefile.am 正在使用 subdir-objects 选项——请注意,我没有对源文件使用递归 makefile——,我无法将我的变量——例如 AM_CPPFLAGS-- 导出到其他 Makefile。到目前为止,我使用了它:
$ make check
但是当我这样做时,我总是遇到路径和选项的问题
$ make distcheck
所以我的问题是,处理单元测试的标准方法是什么?
编辑:
只要我从 tests/Makefile.am 中删除子目录对象,我就让它工作。现在它抛出一些警告但它编译。它似乎仍然不是处理单元测试的合适方法
经过一些研究,我想出了处理单元测试和 Automake 的合适方法:
沿用之前的方案:
./
+ tests/
+ Makefile.am
+ classA_test.cc
....
+ classB_test.cc
+ src/
+ lib/
+ Makefile.am
根目录下的makefile.am为主,这个调用tests目录下的makefile
$ cat Makefile.am
SUBDIRS = . tests # (Super Important) note the "." before tests,
# it means it will be executed first
....
$ cat test/Makefile.am
AM_CXXFLAGS = ...
AM_LDFLAGS = -L @top_srcdir@/lib #If needed
LDADD = -llibraryfortests #If needed
TESTS = test1 .. testN
test1_SOURCES = test1.cc ../src/somewhere/classtotest.cc
testN_SOURCES = ...
$ cat configure.ac
AM_INIT_AUTOMAKE([subdir-objects])
AC_CONFIG_FILES([Makefile])
AC_CONFIG_FILES([tests/Makefile])
...
现在,如果您想 运行 测试
$ sh ../pathto/configure
$ make check
dist[check] 也应该有效
$ make distcheck
...
make[3]: Entering directory `/home/vicente/test/tests'
PASS: settings
============================================================================
Testsuite summary for Pepinos 00.13.15
============================================================================
# TOTAL: 1
# PASS: 1
# SKIP: 0
# XFAIL: 0
# FAIL: 0
# XPASS: 0
# ERROR: 0
============================================================================
make[3]: Leaving directory `/home/vicente/test/tests'
...
所以要回答另一个问题?
问。 我无法导出我的变量——例如,AM_CPPFLAGS-- 到另一个 Makefile。
一个。是的,但我总是可以在 configure.ac 和 AC_SUBT 中声明一个变量,以使其对其他 Makefile.am
可见
来源:
我正在与团队中的其他人一起使用 GNU autotools 在一个项目中工作。在项目中,我们对每个非平凡的 C++ class 使用单元测试。我发现有对单元测试的支持。为此,我使用了这个结构:
./
+ tests/
+ Makefile.am
+ classA_test.cc
....
+ classB_test.cc
+ src/
+ lib/
+ Makefile.am
问题来了,因为我的主要 Makefile.am 正在使用 subdir-objects 选项——请注意,我没有对源文件使用递归 makefile——,我无法将我的变量——例如 AM_CPPFLAGS-- 导出到其他 Makefile。到目前为止,我使用了它:
$ make check
但是当我这样做时,我总是遇到路径和选项的问题
$ make distcheck
所以我的问题是,处理单元测试的标准方法是什么?
编辑:
只要我从 tests/Makefile.am 中删除子目录对象,我就让它工作。现在它抛出一些警告但它编译。它似乎仍然不是处理单元测试的合适方法
经过一些研究,我想出了处理单元测试和 Automake 的合适方法:
沿用之前的方案:
./
+ tests/
+ Makefile.am
+ classA_test.cc
....
+ classB_test.cc
+ src/
+ lib/
+ Makefile.am
根目录下的makefile.am为主,这个调用tests目录下的makefile
$ cat Makefile.am
SUBDIRS = . tests # (Super Important) note the "." before tests,
# it means it will be executed first
....
$ cat test/Makefile.am
AM_CXXFLAGS = ...
AM_LDFLAGS = -L @top_srcdir@/lib #If needed
LDADD = -llibraryfortests #If needed
TESTS = test1 .. testN
test1_SOURCES = test1.cc ../src/somewhere/classtotest.cc
testN_SOURCES = ...
$ cat configure.ac
AM_INIT_AUTOMAKE([subdir-objects])
AC_CONFIG_FILES([Makefile])
AC_CONFIG_FILES([tests/Makefile])
...
现在,如果您想 运行 测试
$ sh ../pathto/configure
$ make check
dist[check] 也应该有效
$ make distcheck
...
make[3]: Entering directory `/home/vicente/test/tests'
PASS: settings
============================================================================
Testsuite summary for Pepinos 00.13.15
============================================================================
# TOTAL: 1
# PASS: 1
# SKIP: 0
# XFAIL: 0
# FAIL: 0
# XPASS: 0
# ERROR: 0
============================================================================
make[3]: Leaving directory `/home/vicente/test/tests'
...
所以要回答另一个问题?
问。 我无法导出我的变量——例如,AM_CPPFLAGS-- 到另一个 Makefile。
一个。是的,但我总是可以在 configure.ac 和 AC_SUBT 中声明一个变量,以使其对其他 Makefile.am
可见来源: