C++ 使用Automake的单元测试

C++ 使用Automake的单元测试,c++,unit-testing,makefile,autotools,automake,C++,Unit Testing,Makefile,Autotools,Automake,我正在与团队中的其他人一起使用GNU autotools进行一个项目。在项目中,我们使用每个非平凡C++类的单元测试。我发现有对单元测试的支持。为此,我使用以下结构: ./ + tests/ + Makefile.am + classA_test.cc .... + classB_test.cc + src/ + lib/ + Makefile.am 问题是因为我的主Makefile.am使用的是subdir对象选项——请注意

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

 ./
   + tests/
     + Makefile.am
     + classA_test.cc
     ....
     + classB_test.cc
   + src/
   + lib/
   + Makefile.am 
问题是因为我的主Makefile.am使用的是subdir对象选项——请注意,我没有对源文件使用递归Makefile——我无法将变量(如am_CPPFLAGS)导出到另一个Makefile。到目前为止,我是通过以下方式实现的:

  $ make check      
但是当我这样做的时候,我总是在路径和选项上遇到问题

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

编辑:


只要我从tests/Makefile.am中删除subdir对象,它就可以工作。现在它抛出一些警告,但它编译。尽管如此,它似乎不是处理单元测试的合适方法

经过一些研究,我找到了处理单元测试和自动生成的合适方法:

按照先前的计划:

./
+ 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 
距离[检查]也应该起作用

$ 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'
...
那么回答另一个问题呢

我无法将我的变量(例如,amcppflags)导出到另一个Makefile

答:是的,但我始终可以在configure.ac和ac_子项中声明一个变量,使其对其他Makefile.am可见


来源:

您现在如何设置
AM\u CPPFLAGS
?您是否对
configure.AC
中的变量使用
AC\u SUBST
?在主Makefile.am中,我是否设置了全局标志,并对额外变量使用AC\u SUBST