由于您已经在使用自动工具,因此您已经拥有了大部分基础架构。我不知道目录布局,但假设你有: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 的全部意义在于您无需担心它是如何完成的。
测试反馈更复杂,具体取决于您的要求。您可以一直使用并行测试工具,或者只是简单的通过/失败反馈。除非测试是主要瓶颈,或者项目很大,否则使用简单(或脚本)测试会更容易。