使用Automake进行单元测试

Vic*_*lea 5 c++ automake unit-testing makefile autotools

我正在使用GNU autotools与团队中的其他人一起开展项目.在项目中,我们对每个非平凡的C++类使用单元测试.我发现有单元测试的支持.为此我使用这个结构:

 ./
   + tests/
     + Makefile.am
     + classA_test.cc
     ....
     + classB_test.cc
   + src/
   + lib/
   + Makefile.am 
Run Code Online (Sandbox Code Playgroud)

问题出现了,因为我的主Makefile.am正在使用subdir-objects选项 - 注意我没有使用递归的makefile作为源文件 - 我无法将我的变量 - 例如AM_CPPFLAGS--导出到另一个Makefile.到目前为止,我使用它:

  $ make check      
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时,我一直在为路径和选项遇到问题

  $ make distcheck
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,处理单元测试的标准方法是什么?

编辑:

只要我从tests/Makefile.am中删除subdir-objects,我就可以使用它.现在它抛出一些警告,但它编译.仍然似乎不适合处理单元测试

Vic*_*lea 4

经过一些研究,我想出了处理单元测试和 Automake 的适当方法:

按照之前的方案:

./
+ tests/
  + Makefile.am
  + classA_test.cc
  ....
  + classB_test.cc
+ src/
+ lib/
+ Makefile.am
Run Code Online (Sandbox Code Playgroud)

根目录中的 makefile.am 将是主要的,它调用测试目录中的 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])
... 
Run Code Online (Sandbox Code Playgroud)

现在如果你想运行测试

$ sh ../pathto/configure 
$ make check 
Run Code Online (Sandbox Code Playgroud)

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'
...
Run Code Online (Sandbox Code Playgroud)

那么回答另一个问题呢?

问:我无法将我的变量(例如 AM_CPPFLAGS)导出到其他 Makefile 中

答:确实如此,但我总是可以在configure.ac和AC_SUBT中声明一个变量,以使其对其他Makefile.am可见

资料来源:/sf/answers/2047912261/