由于您已经在使用自动工具,因此您已经拥有了大部分基础架构。我不知道目录布局,但假设你有:SUBDIRS = soroush tests
在顶级Makefile.am
,或者,你可能SUBDIRS = tests
在soroush
目录中。重要的是 libtool-managedlibsoroush.la
在下降到tests
目录之前存在。
前缀check_
表示这些对象,在这种情况下PROGRAM
,不应该在make check
运行之前构建。所以在tests/Makefile.am
=>check_PROGRAMS = t1 t2 t3
对于每个测试程序,您可以指定:t1_SOURCES = t1.cc
等。作为一种快捷方式,如果每个测试只有一个源文件,您可以使用AM_DEFAULT_SOURCE_EXT = .cc
,它会为您隐式生成源文件。至今:
AM_CPPFLAGS = -I$(srcdir)/.. $(OTHER_CPPFLAGS) # relative path to lib headers.
LDADD = ../soroush/libsoroush.la
check_PROGRAMS = t1 t2 t3
AM_DEFAULT_SOURCE_EXT = .cc
# or: t1_SOURCES = t1.cc, t1_LDADD = ../soroush/libsoroush.la, etc.
make check
将构建但不执行这些程序。为此,您需要添加:
TESTS = $(check_PROGRAMS)
这种方法真正好的地方在于,如果构建为共享库,libtool 将使用卸载libsoroush
的库来处理库搜索路径等。
通常,生成的t1
程序只是一个设置环境变量的 shell 脚本,以便真正的二进制:.libs/t1
可以执行。我只提到这一点,因为使用 libtool 的全部意义在于您无需担心它是如何完成的。
测试反馈更复杂,具体取决于您的要求。您可以一直使用并行测试工具,或者只是简单的通过/失败反馈。除非测试是主要瓶颈,或者项目很大,否则使用简单(或脚本)测试会更容易。