提问人:Marcelo Simon 提问时间:10/18/2023 更新时间:10/18/2023 访问量:34
如何通过 CMakeLists.txt 包装函数
How to wrap a function via CMakeLists.txt
问:
我正在为 zephyr 实现一些单元测试,我需要模拟一个包含在我无法从测试中删除的文件中的函数。因此,我正在尝试使用该标志来创建一个被调用的包装器。-Wl,--wrap=symbol
在 GCC 包装器上显示,使用命令我将能够包装功能。gcc main.c foo.c -Wl,--wrap=foo -o main
foo
我的问题是 Zephyr 主要是用 CMake 实现的,我正在努力让它生成这样的调用。 如何设置我的 CMakeLists.txt,以便我可以链接到文件并使用换行功能?
我在我的CMakeLists.txt中尝试了以下操作:
# SPDX-License-Identifier: Apache-2.0
cmake_minimum_required(VERSION 3.20.0)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(motion_monitor_test)
set(SOURCES
file1_path.c
file2_path.c
)
target_sources(app PRIVATE ${SOURCES})
target_compile_options(app PRIVATE "-Wl,--wrap=set_tx_power")
但是,它不是生成一个调用,而是创建分隔的调用:和。gcc -Wl,--wrap=set_tx_power -o CMakeFiles/app.dir/file.c.obj -c file1_path.c file2_path.c
gcc -Wl,--wrap=set_tx_power -o CMakeFiles/app.dir/file1.c.obj -c file1_path.c
gcc -Wl,--wrap=set_tx_power -o CMakeFiles/app.dir/file2.c.obj -c file2_path.c
答: 暂无答案
评论
-Wl
表示链接器选项。可以通过命令在 CMake 中指定此类选项。例如,请看这个问题。target_link_options