在Yocto中,如何在其他食谱中包括标头文件



我的程序取决于poco配方,该配方同时提供标题文件和共享库。但是,我无法在食谱中使用poco的标题文件,这导致错误Poco/Delegate.h: No such file for directory

如何使标题在我的软件包的构建时间可用?

这是一个示例食谱:

SUMMARY = ""
DESCRIPTION = ""
AUTHOR = ""
LICENSE = "CLOSED"
LIC_FILES_CHKSUM = ""
HOMEPAGE = ""
BUGTRACKER = ""
S = "${WORKDIR}"
SRC_URI = " file://foo.cpp 
            file://CMakeLists.txt 
"
inherit pkgconfig cmake
DEPENDS_foo = "poco"
RDEPENDS_foo = "poco"
do_install() {
    install -d ${D}/${bindir}
    install -m 755 ${S}/foo ${D}/${bindir}
}
FILES_${PN} = "${bindir}/foo"

手动推荐:

食谱绝不应直接填充Sysroot:

推荐方法是(Poco食谱应该做类似的事情(:

文件应安装到标准位置:

...
do_install() {
...
    install -d ${D}${includedir}
    install -m 0755 ${S}/myapi.h ${D}${includedir}/
...
}
...

而不是,包括 poco食谱作为 foo.bb 的构建依赖性:

依赖 =" poco"

正常编译。

我们可以使用提供商 user 为了说明这种情况,软件包(食谱(提供了一个标题文件,要由另一个文件使用软件包(食谱(是提供者,软件包(食谱(使用来自另一个软件包(食谱(的标头文件是 user

首先,我们更改提供商的食谱( myProvider.bb (导出标头文件 - myapi.h

...
do_install() {
    install -d ${D}/${bindir}
    install -m 755 ${B}/hello_provider ${D}/${bindir}
    install -d ${D}${libdir}/lib_myprovider/
    install -m 0755 ${WORKDIR}/myapi.h ${STAGING_DIR_TARGET}${libdir}/lib_myprovider/
}
...

其次,我们更改用户的食谱( myuser.bb (转介标头文件 - myapi.h

...
do_compile () {    
    ${CC} ${WORKDIR}/main.c -o hello_user ${CFLAGS} ${LDFLAGS} -I${STAGING_DIR_TARGET}/${libdir}/lib_myprovider/ 
}
# file dependency declaration
FILES_${PN} = "${libdir}/lib_myprovider"
# package dependency declaration
DEPENDS += "myprovider"
...

终于,重建myprovider.bb和myuser.bb食谱,它应该起作用。

您可以使用 DEPENDS具有" poco"的依赖关系。食谱,它将建立和填充" Poco"食谱的标题和液体进入您的食谱的Sysroot。

您必须使用FILES_*( * - package type)

在提供商食谱中的出口路径相似的方式