在Yocto中,如何包含来自另一个食谱的头文件

时间:2018-04-26 05:02:19

标签: 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"

2 个答案:

答案 0 :(得分:1)

手册建议:

  

食谱永远不要直接填充sysroot:

推荐的方式是(poco食谱应该做类似的事情):

  

文件应安装在标准位置:

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

然后,将 poco食谱包含为 foo.bb 的构建依赖项:

DEPENDS + =“ poco”

并正常编译。

答案 1 :(得分:0)

我们可以使用 provider 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食谱,它应该可以工作。

相关问题