You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加unittest组件时Zephyr base64测试样例构建失败:sysbuild_cache未找到

问题:Zephyr unittest组件加载时sysbuild_cache目标未找到导致构建失败

问题现象

构建Zephyr base64单元测试样例时,若在CMake命令中添加unittest组件以启用Mock功能:

find_package(Zephyr COMPONENTS unittest REQUIRED HINTS $ENV{ZEPHYR_BASE})

构建会失败,核心错误为:

get_property could not find TARGET sysbuild_cache. Perhaps it has not yet been created.

移除unittest组件后构建恢复正常。使用nRF Connect for VSCode生成的构建命令,或手动执行带--sysbuild参数的west build命令,均会触发该错误。

环境信息

  • SDK/工具链版本:3.0.2
  • west版本:1.5.0
  • nRF Connect for VSCode:2026.3.1484
  • CMake版本:4.2.3
  • Python版本:3.12.11

最小复现示例(MRE)

文件结构

base64/
├─ CMakeLists.txt
├─ main.c
├─ prj.conf
├─ testcase.yaml

失败的CMakeLists.txt

cmake_minimum_required(VERSION 3.20.0)
find_package(Zephyr COMPONENTS unittest REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(base64)
target_sources(testbinary PRIVATE main.c)

正常的CMakeLists.txt

cmake_minimum_required(VERSION 3.20.0)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(base64)
target_sources(app PRIVATE main.c)

main.c

#include <zephyr/ztest.h>
ZTEST(lib_base64, test_base64_codec)
{
    zassert_equal(1, 1, "1 doesn't equal 1");
}
ZTEST_SUITE(lib_base64, NULL, NULL, NULL, NULL, NULL);

prj.conf

CONFIG_ZTEST=y

testcase.yaml

tests:
  utilities.base64:
    tags: base64
    type: unit

构建命令

west build --build-dir /h*****/project/base64/build /h*****/project/base64 --pristine --board native_posix/native/64

解决方案

方案1:调整CMake加载顺序,延迟加载unittest组件

修改CMakeLists.txt,不在find_package中指定unittest组件,而是在project之后通过include(zephyr/unittest)启用Mock功能:

cmake_minimum_required(VERSION 3.20.0)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(base64)
# 加载unittest组件以启用Mock功能
include(zephyr/unittest)
target_sources(testbinary PRIVATE main.c)

同时在prj.conf中添加Mock功能的配置:

CONFIG_ZTEST=y
CONFIG_ZTEST_MOCK=y

方案2:移除构建命令中的--sysbuild参数

Zephyr单元测试(尤其是native_posix平台)无需使用sysbuild模式(该模式用于多镜像构建场景)。修改构建命令,去掉--sysbuild参数即可正常构建。

若使用nRF Connect for VSCode,可在VSCode的构建配置(如.vscode/settings.json或构建任务)中移除--sysbuild参数,避免自动生成带该参数的命令。

原理说明

在find_package(Zephyr)中指定unittest组件时,CMake会提前加载unittest的相关脚本,而这些脚本会尝试访问sysbuild_cache目标——该目标由sysbuild框架在后续流程中创建,因此触发"未找到目标"的错误。通过延迟加载unittest组件,或移除不必要的--sysbuild参数,可确保CMake在访问sysbuild_cache前完成目标创建。

内容的提问来源于stack exchange,提问作者BLACKSPIRE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 10:37:05