2015-03-25 32 views
5

我正在与使用GNU autotools的团队中的其他人一起工作。在这个项目中,我们对每个非平凡的C++类使用单元测试。我发现支持单元测试。对于我采用这种结构:使用Automake进行单元测试

./ 
    + tests/ 
    + Makefile.am 
    + classA_test.cc 
    .... 
    + classB_test.cc 
    + src/ 
    + lib/ 
    + Makefile.am 

问题就来了,因为我的主要Makefile.am使用子目录对象选项 - 注,我没有使用递归的Makefile源files--,我无法将我的变量(如AM_CPPFLAGS)导出到其他Makefile。到目前为止,我做了它的工作使用:

$ make check  

,但我一直在路径获取问题和选项,当我做

$ make distcheck 

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

编辑:

我做了,只要我从测试/ Makefile.am删除子目录对象它的工作。现在它抛出一些警告,但它编译。不过这似乎并没有被处理单元测试

+0

你是如何设置'AM_CPPFLAGS'现在呢?你在'configure.ac'中使用'AC_SUBST'作为变量吗? – 2015-03-25 13:22:31

+0

在Makefile.am主文件中,我设置了全局标志,并且使用了AC_SUBST作为额外的变量 – 2015-03-25 17:50:50

回答

1

以适当的方式经过一番研究,我想出了此时,相应的方式来处理单元测试及Automake:

继先前的方案:

./ 
+ tests/ 
    + Makefile.am 
    + classA_test.cc 
    .... 
    + classB_test.cc 
+ src/ 
+ lib/ 
+ Makefile.am 

根将是一个主要的makefile.am,这一次调用在测试目录中生成文件现在

$ 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 @[email protected]/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【检查】应努力

$ 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文件

A.是的,但我总能在configure.ac声明一个变量,AC_SUBT使其可见于其他Makefile.am

来源:https://stackoverflow.com/a/29255889/2420872