使用 Cmock 向模拟函数添加 __wrap 前缀

Add __wrap prefix to mocked functions with Cmock

我使用 Ceedling 从我的 foo.h header 生成了 mock_foo.hmock_foo.c。问题是在生成的文件中有与 foo.c 中相同的函数名称。例如,foo_function() 现在在 foo.cmock_foo.c 中,我必须手动添加 __wrap 前缀,这样链接器就不会抱怨多个定义。

是否可以在 project.yml 中添加一些选项以生成已经具有该前缀的函数,即。 __wrap_foo_function()?

CMock 目前没有为函数名称添加 user-defined 前缀(如 __wrap)的选项。此类功能已在 2014 年讨论过两次(请参阅 Issue #32) and 2017 (Issue #137),但不幸的是,讨论过早结束,无法将此功能添加到项目中。

Issue #32 甚至提出了一个补丁,但我想这将不再适用于当前的代码基础。

可能的解决方法是编写一个脚本,通过向文件中的所有函数声明添加 __wrap 前缀来生成模块头文件 foo.h 的修改版本。使用这样一个修改后的头文件,CMock 将生成一个 mock_foo.c 和适当的函数名称。

对于 Python 存在 pycparser project which might be helpful for this task. Especially the func_defs.py 示例看起来是一个很有前途的起点。