【问题标题】:Unit tests using Automake使用 Automake 进行单元测试
【发布时间】:2015-05-28 20:25:02
【问题描述】:

我正在与团队中的其他人一起使用 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

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

编辑:

只要我从测试/Makefile.am 中删除子目录对象,它就可以工作。现在它会抛出一些警告,但它会编译。似乎仍然不是处理单元测试的合适方法

【问题讨论】:

  • 你现在如何设置AM_CPPFLAGS?您是否使用AC_SUBST 表示configure.ac 中的变量?
  • 在主 Makefile.am 中我设置了全局 FLAGS 并使用 AC_SUBST 作为额外变量

标签: c++ unit-testing makefile autotools automake


【解决方案1】:

经过一些研究,我想出了处理单元测试和 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。

A.没错,但我总是可以在 configure.ac 和 AC_SUBT 中声明一个变量,以使其对其他 Makefile.am 可见

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

【讨论】:

    猜你喜欢
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2011-11-16
    • 2012-05-23
    • 2010-11-30
    • 2010-12-31
    • 2018-05-06
    相关资源
    最近更新 更多