Vic*_*lea 5 c++ automake unit-testing makefile autotools
我想将相同的LDADD属性(单元测试库)设置为大量目标(单元测试C ++文件)。我首先尽管可能是automake具有AM_LDADD变量来将该库添加到文件中的所有目标,但事实并非如此。在一些邮件列表中,我发现了一些简短的讨论,要求添加它:http : //gnu-automake.7480.n7.nabble.com/AM-LIBS-AM-LDADD-td3698.html
我的问题是,您如何处理?有什么方法可以避免手动将LDADD属性添加到每个目标?
到目前为止,我的Makefile.am看起来像:
test1_SOURCES = ...
test1_LDADD = -llibrary
...
...
test20_SOURCES = ...
test20_LDADD = -llibrary
Run Code Online (Sandbox Code Playgroud)
AM_LDADD
变量的等效项是LDADD
。例如,
LDADD = -llibrary
test1_SOURCES = ...
...
test20_SOURCES = ...
Run Code Online (Sandbox Code Playgroud)
如果您需要覆盖LDADD
特定的程序:prog
,则prog_LDADD
始终优先。
我一直认为,由于没有LDADD
传递标准环境变量configure
(如您所见),configure --help
因此没有真正的理由AM_LDADD
。像configure
脚本一样,这种方式以及任何选项(例如)--with-foo=<path>
都应该(理想情况下)解决库依赖关系。
另一方面,CFLAGS
通过configure
可能仍需要AM_CFLAGS
结合使用CFLAGS
并与配置脚本确定的其他编译器标志结合使用;甚至是foo_CFLAGS
替代。由于configure
必须告知您的习惯CFLAGS
。
另外,我不知道这些test<n>
程序是否仅使用单个C ++源文件,但是如果这样,则可以使用以下命令简化Makefile.am
:
LDADD = -llibrary
check_PROGRAMS = test1 test2 ... test20
AM_DEFAULT_SOURCE_EXT = .cc # or .cpp
Run Code Online (Sandbox Code Playgroud)
作为描述在这里。
关于您的评论,您可以为此使用便利库 -这对于测试程序使用的通用代码特别有用:
noinst_LIBRARIES = libfoo.a # or noinst_LTLIBRARIES = libfoo.la
libfoo_a_SOURCES = MyClass.hh MyClass.cc # or libfoo_la_SOURCES
LDADD = ./libfoo.a -llibrary # or libfoo.la if using libtool.
... etc ...
Run Code Online (Sandbox Code Playgroud)