Bitbake从本地来源创建cmake食谱

时间:2020-11-02 09:51:55

标签: cmake yocto bitbake

我正在尝试使用cmake配方构建一个helloworld软件包示例。我的问题是bitbake给我一个错误,因为它在/tmp/work/core2-64-poky-linux/helloworld/0.1-r0文件夹中找不到CMakeLists.txt。

错误:

helloworld-0.1-r0 do_configure: Execution of '/path-to-tmp/tmp/work/core2-64-poky-linux/helloworld/0.1-r0/temp/run.do_configure.28001' failed with exit code 1:
CMake Error: The source directory "/path-to-tmp/tmp/work/core2-64-poky-linux/helloworld/0.1-r0/files" does not appear to contain CMakeLists.txt.

我的包裹在我的图层meta-mylayer / recipes-core / helloworld中:

meta-mylayer/
├── conf
│   └── layer.conf
├── COPYING.MIT
├── README
└── recipes-core
    └── helloworld
        ├── files
        │   ├── CMakeLists.txt
        │   └── main_helloworld.c
        └── helloworld_0.1.bb

我的CMakeLists.txt:

cmake_minimum_required(VERSION 2.4)

project(helloworld)
file(GLOB_RECURSE files/*.c)

add_executable(app ${src_files})

install(TARGETS helloworld DESTINATION bin)

我的helloworld_0.1.bb:

PN="helloworld"
PV="0.1"
P="${PN}-${PV}"
DESCRIPTION="This is my package helloworld"
LICENSE="CLOSED"
FILESEXTRAPATHS_prepend:="${THISDIR}/${PN}:"
RDEPENDS_${PN}+=""
DEPENDS+=""
DEPENDS+="cmake"

SRC_URI+="file://CMakeLists.txt file://main_helloworld.c"

S="${WORKDIR}/files"

inherit pkgconfig cmake

我在/path-to-tmp/tmp/work/core2-64-poky-linux/helloworld/0.1-r0/*中找不到文件

为什么不复制文件?我在用yocto Dunfell。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

当文件位于SRC_URI中时,它们将安装在${WORKDIR}中。

以下配方可以解决问题:

DESCRIPTION="This is my package helloworld"
LICENSE="CLOSED"

SRC_URI+="file://CMakeLists.txt file://main_helloworld.c"

S="${WORKDIR}"

inherit pkgconfig cmake

此外,您的CMakeLists.txt不应在files目录中找到文件。

S设置为${WORKDIR},因为这是默认情况下放置file://提取程序中文件的位置。

DEPENDS中已经包含您继承的cmake bbclass中的cmake-native。您不需要依赖cmake,因为您依赖cmake-native(在构建时需要执行 cmake,不需要cmake标头或源代码)。

默认情况下,Bitbake已使用添加的FILESEXTRAPATHS(并且它也与您的目录布局不匹配)。

PNPV是从bb配方的文件名中获得的,无需再次设置它们。