【发布时间】:2020-05-25 22:16:42
【问题描述】:
我有一个分成模块的软件项目。它们单独编译并链接到库或可执行文件中。桌面上没有什么新东西:
$ 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
...
我也遇到过类似的情况,我意识到如果在 test_helper 之前编译了 foobar 可执行文件,那么 -DTESTING 的定义就不会得到尊重。
这显然是因为 Automake 在构建单元测试时发现 helper.o 已经编译。这也意味着首先编译单元测试可能会启用上述额外代码,并将其嵌入到foobar 可执行文件中。
有没有办法告诉 Automake 提供的文件应该在单元测试的上下文中重新编译,以便单元测试和二进制文件不使用相同的编译对象?
感谢您的帮助。
【问题讨论】: