使用 Cmock 向模拟函数添加 __wrap 前缀
Add __wrap prefix to mocked functions with Cmock
我使用 Ceedling 从我的 foo.h
header 生成了 mock_foo.h
和 mock_foo.c
。问题是在生成的文件中有与 foo.c
中相同的函数名称。例如,foo_function()
现在在 foo.c
和 mock_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 示例看起来是一个很有前途的起点。
我使用 Ceedling 从我的 foo.h
header 生成了 mock_foo.h
和 mock_foo.c
。问题是在生成的文件中有与 foo.c
中相同的函数名称。例如,foo_function()
现在在 foo.c
和 mock_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 示例看起来是一个很有前途的起点。