如何使用 jsoncpp 库在 yocto 中编译 git repo?

how to compile a git repo in yocto with jsoncpp libary?

我写了一个在 Yocto 中编译 git 回购的方法。存储库包含一个 Makefile 来编译代码。我第一次能够在 Yocto 中编译代码,但是当我在我的代码中添加 jsoncpp 库时,Yocto 无法编译它。它显示了一些错误,如

test_1.cpp:5:10: fatal error: jsoncpp/json/json.h: No such file or directory
|     5 | #include <jsoncpp/json/json.h>
|       |          ^~~~~~~~~~~~~~~~~~~~~

这是我的食谱文件。请建议我编译代码需要做的更改。

yocto_test.bb

SUMMARY = "Hello World"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
DEPENDS = "jsoncpp"

SRCREV = "90052737ee51abca69a334a9208e2fec82d78c19"
SRC_URI = " \
    git://github.com/arghyaBiswas05/yocto-test.git \
    "

S = "${WORKDIR}/git/"

do_compile() {
    oe_runmake all
}

# Install binary to final directory /usr/bin
do_install() {
    install -d ${D}${bindir}
    install -m 0755 ${S}test_file ${D}${bindir}
}

这是我的 Makefile

all:
    ${CXX} test_1.cpp -o test_file $(shell pkg-config --cflags --libs jsoncpp)

install:
    cp test_file /usr/bin

clean:
    rm -rf test_file

请建议我更改。

Makefile 应该使用 CXXFLAGSLDFLAGS 而不是硬编码的 JSONLIB。这两个变量相应地由 Yocto 设置,并且需要能够找到您在 DEPENDS.

中的食谱提供的文件。

如果我可以建议,使用 meson、autotools 或 cmake 可能比手动编写 Makefille 更快。

命令pkg-config --cflags --libs jsoncpp的输出是什么?如果你 运行 它来自 Yocto,它会打印什么?您可以要求您的 makefile 本身打印此信息,方法是在 makefile 中添加如下内容:

$(info args: $(shell pkg-config --cflags --libs jsoncpp))

它可能会打印一些东西,包括标志 -I/usr/include/jasoncpp。如果确实如此,那么您的 #include 是错误的,因为 /usr/include/jasoncpp-I 加上 jasoncpp/json/json.h 的包含给出了 /usr/include/jasoncpp/jasoncpp/json/json.h 的完整路径,并且该文件显然没有不存在。

我认为您的 include 很可能应该是 #include <json/json.h>,但是如果不知道 jsoncpp 包是如何安装的,它把它的 headers 放在哪里,就无法确定它期望什么标志。