如何通过 CMakeLists.txt 包装函数

How to wrap a function via CMakeLists.txt

提问人:Marcelo Simon 提问时间:10/18/2023 更新时间:10/18/2023 访问量:34

问:

我正在为 zephyr 实现一些单元测试,我需要模拟一个包含在我无法从测试中删除的文件中的函数。因此,我正在尝试使用该标志来创建一个被调用的包装器。-Wl,--wrap=symbol

GCC 包装器上显示,使用命令我将能够包装功能。gcc main.c foo.c -Wl,--wrap=foo -o mainfoo

我的问题是 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.cgcc -Wl,--wrap=set_tx_power -o CMakeFiles/app.dir/file1.c.obj -c file1_path.cgcc -Wl,--wrap=set_tx_power -o CMakeFiles/app.dir/file2.c.obj -c file2_path.c

GCC CMake Zephyr-RTOS

评论

1赞 Tsyvarev 10/18/2023
-Wl表示链接器选项。可以通过命令在 CMake 中指定此类选项。例如,请看这个问题target_link_options

答: 暂无答案