Automake,用于测试的特殊标志

问题描述 投票:0回答:1

我有一个软件项目,该项目分为多个模块。它们分别编译并链接到库或可执行文件中。桌子上没有新内容:

$ cat src/Makefile.am
...
bin_PROGRAMS = foobar
foobar_SOURCES = foobar.c helper.c
...

单元测试验证单个文件的属性,例如特定功能的正确性。假设我要测试helper.c的正确性,我不需要在单元测试中链接foobar.c

$ cat tests/Makefile.am
...
check_PROGRAMS = test_helper
test_helper_SOURCES = test_helper.c ../src/helper.c
...

我认为在编译单元测试时启用一组不同的标志是一种常见的做法。例如,可以决定引入特殊的一致性检查(可能计算量大),并且仅在将源代码编译为单元测试的一部分时才启用它们。

$ cat tests/Makefile.am
...    
AM_CPPFLAGS = -DTESTING
check_PROGRAMS = test_helper
test_helper_SOURCES = test_helper.c ../src/helper.c
...

我有类似的情况,并且我意识到如果-DTESTING可执行文件在foobar之前编译,则test_helper定义将不被接受。

这显然是由于Automake在构建单元测试时发现helper.o已被编译的事实。这也意味着,首先编译单元测试可能会启用上述额外代码,并将其嵌入到foobar可执行文件中。

是否有一种方法可以告诉Automake,应在单元测试的上下文中重新编译提供的文件,以使单元测试和二进制文件不使用同一编译对象?

感谢您的帮助。

c automake
1个回答
0
投票

哦,我找到了解决方法。

引用自动制作手册:

27.8每个对象标志仿真

我的一个源文件需要使用不同的标志进行编译。我该怎么办?

Automake支持按程序和按库编译标志(请参见第8.4节[程序和库变量],第65页,以及第27.6节[Flag Variables Ordering],第145页)。有了这个你可以定义适用于所有已编译文件的编译标志目标。例如在

bin_PROGRAMS = foo
foo_SOURCES = foo.c foo.h bar.c bar.h main.c
foo_CFLAGS = -some -flags

foo-foo.ofoo-bar.ofoo-main.o将全部用-some -flags编译。 (如果您想知道这些对象文件的名称,请参见第27.7节“重命名对象”,第148页。)

© www.soinside.com 2019 - 2024. All rights reserved.