配置Ceedling解决多测试文件与工具代码的链接未定义问题
解决Ceedling测试链接时
utility.c符号未定义的问题 问题根因
执行ceedling test:foo时,Ceedling默认只会编译并链接test/test_foo.c、对应业务源文件及mock文件,不会自动包含同目录下的utility.c,导致链接阶段找不到该文件里的符号。
两种可行解决方案
方案一:直接指定测试额外源文件
在现有YAML配置中新增:test_build:节点,明确把utility.c加入测试编译的源文件列表:
:paths: :test: - +:test/** - -:test/support :source: - ../../src/** :include: .. my dependency for mocking :support: - test/support :libraries: [] # 新增配置:告诉Ceedling编译测试时要带上utility.c :test_build: :sources: - test/utility.c
方案二:将工具代码归类到支持目录(更规范)
如果utility.c是纯测试辅助代码,可以按Ceedling的规范把它放到test/support目录下,再调整配置让Ceedling自动编译该目录的文件:
- 移动文件:把
test/utility.c、test/utility.h移到test/support目录下 - 修改配置:
:paths: :test: - +:test/** - -:test/support :source: - ../../src/** :include: - test/support # 新增:让测试文件能找到support目录下的头文件 .. my dependency for mocking :support: - test/support/** # 修改为包含support下所有文件 :libraries: []
验证
改完配置后重新执行ceedling test:foo,链接器会自动编译并关联utility.c的目标文件,符号未定义的问题就能解决。
内容的提问来源于stack exchange,提问作者user28737532
相关产品推荐
相关产品推荐

