我使用check
框架进行了一些C单元测试。
我的Makefile.am
看起来像是:
check_PROGRAMS = check_fseqs
check_fseqs_SOURCES = tests/check_fseqs.c
check_fseqs_LDADD = -lcheck
文件结构是(某些文件省略):
.
|-- Makefile.am
|-- configure.ac
|-- src
| |-- fseqs.c
| |-- fseqs.h
| |-- fseqs.o
`-- tests
`-- check_fseqs.c
然后我运行make check
并抛出:
$ make check
/Applications/Xcode.app/Contents/Developer/usr/bin/make check_fseqs
gcc -g -O2 -o check_fseqs tests/check_fseqs.o -lcheck
Undefined symbols for architecture x86_64:
"_f_msb", referenced from:
_test_f_msb in check_fseqs.o
"_min", referenced from:
_test_min in check_fseqs.o
"_substract", referenced from:
_test_substract in check_fseqs.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [check_fseqs] Error 1
make: *** [check-am] Error 2
有什么问题?
答案 0 :(得分:1)
你错过了依赖。如果您要构建fseqs.o,则需要将其添加为check_DEPENDENCIES
,并将其添加到check_LDADD
行。如果它是一个库,你就会做同样的事情,指定库文件而不是所有使文库生效的目标文件。
check_DEPENDENCIES
位确保生成正确的规则,check_LDADD
确保在链接时将文件添加到命令行。