我正在使用GNU自动工具与团队中的其他人一起进行项目。在项目中,我们对每个不重要的C ++类使用单元测试。我发现有对单元测试的支持。为此,我使用这种结构:
./
+ 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可见。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句