我正在尝试在我的Buildroot包中添加只有头的库https://github.com/nlohmann/json "JSON C++“,以便在目标嵌入式Linux板上使用,以及在单元测试中在我的主机构建机器上使用。
但是,无论我做什么,我都会得到各种各样的错误,包括ERROR: Dependency "nlohmann_json" not found, tried pkgconfig and cmake。
--添加这个库包的正确方法是什么?
有关我的设置的详细信息:
该JSON库在Buildroot源代码中称为json-for-modern-cpp,位于这里:https://github.com/buildroot/buildroot/tree/master/package/json-for-modern-cpp
我的buildroot/package/json-for-modern-cpp/json-for-modern-cpp.mk文件从Buildroot直接看上去像像这样
################################################################################
#
# json-for-modern-cpp
#
################################################################################
JSON_FOR_MODERN_CPP_VERSION = 3.10.5
JSON_FOR_MODERN_CPP_SOURCE = json-$(JSON_FOR_MODERN_CPP_VERSION).tar.gz
JSON_FOR_MODERN_CPP_SITE = $(call github,nlohmann,json,v$(JSON_FOR_MODERN_CPP_VERSION))
JSON_FOR_MODERN_CPP_LICENSE = MIT
JSON_FOR_MODERN_CPP_LICENSE_FILES = LICENSE.MIT
JSON_FOR_MODERN_CPP_CPE_ID_VENDOR = json-for-modern-cpp_project
JSON_FOR_MODERN_CPP_INSTALL_STAGING = YES
# header only library
JSON_FOR_MODERN_CPP_INSTALL_TARGET = NO
JSON_FOR_MODERN_CPP_CONF_OPTS = -DJSON_BuildTests=OFF -DJSON_MultipleHeaders=ON
$(eval $(cmake-package))我的包的br2-external/package/my-module-name/my-module-name.mk makefile中包含这些依赖项(注意,我在MY_MODULE_NAME_DEPENDENCIES目标板依赖项以及HOST_MY_MODULE_NAME_DEPENDENCIES主机构建系统依赖项中都添加了json-for-modern-cpp:
MY_MODULE_NAME_DEPENDENCIES += \
some-other-lib1 \
some-other-lib2 \
json-for-modern-cpp
HOST_MY_MODULE_NAME_DEPENDENCIES += \
host-some-other-lib1 \
host-some-other-lib2 \
json-for-modern-cpp发布于 2022-08-10 07:52:48
如何将Buildroot包添加到包和meson.build文件中
我想通了。我在我的eRCaGuy_dotfiles/git & Linux cmds, help, tips & tricks - Gabriel.txt便笺文件中记录了我学到的东西。搜索该文档中的“从其他meson.build文件中添加依赖项”和"nlohmann“以获取详细信息和注释。
以下是解决办法:
如果需要添加第三方库或类似于现代C++ (https://github.com/nlohmann/json)的JSON之类的依赖项,只需这样做:
'nlohmann_json'项目名称。在模块的meson.build文件中使用:
https://github.com/nlohmann/json/blob/develop/meson.build#L1 =# NB:这个nlohmann\_json meson.build名称可以从它的公共回购的# meson.build文件中识别出来:nlohmann\_json dependency('nlohmann_json') dependency('some_other_lib2'),dependency('some_other_lib3'),dependency('some_other_lib4'),
然后,all_deps将在您的meson.build文件中用于构建可执行文件并指定库依赖项--例如:
my_lib = static_library(‘my_my_name’,include_directories : include_dirs,源: library_sources,依赖项: all_deps,cpp_args: compiler_options,install: true,)$(eval $(host-cmake-package))添加到Buildroot中的json-for-modern-cpp.mk文件底部:https://github.com/buildroot/buildroot/blob/master/package/json-for-modern-cpp/json-for-modern-cpp.mk。这需要将您自己的提交添加到该回购的自定义分支中。
它将从以下内容更改该文件:
################################################################################ ##json-代表现代cpp################################################################################# JSON_FOR_MODERN_CPP_VERSION = 3.10.5 JSON_FOR_MODERN_CPP_SOURCE = json-$(JSON_FOR_MODERN_CPP_VERSION).tar.gz JSON_FOR_MODERN_CPP_SITE =$(调用github,nlohmann,json,v.$(JSON_FOR_MODERN_CPP_VERSION) JSON_FOR_MODERN_CPP_LICENSE = MIT JSON_FOR_MODERN_CPP_LICENSE_FILES = LICENSE.MIT JSON_FOR_MODERN_CPP_CPE_ID_VENDOR =json-for现代-cpp_project JSON_FOR_MODERN_CPP_INSTALL_STAGING = YES #报头专用库JSON_FOR_MODERN_CPP_INSTALL_TARGET = NO JSON_FOR_MODERN_CPP_CONF_OPTS = -DJSON_BuildTests=OFF -DJSON_MultipleHeaders=ON $(eval $(cmake-package))
对此:
################################################################################ ##json-代表现代cpp################################################################################# JSON_FOR_MODERN_CPP_VERSION = 3.10.5 JSON_FOR_MODERN_CPP_SOURCE = json-$(JSON_FOR_MODERN_CPP_VERSION).tar.gz JSON_FOR_MODERN_CPP_SITE =$(调用github,诺曼,杰森V$(JSON_FOR_MODERN_CPP_VERSION) JSON_FOR_MODERN_CPP_LICENSE = MIT JSON_FOR_MODERN_CPP_LICENSE_FILES = LICENSE.MIT JSON_FOR_MODERN_CPP_CPE_ID_VENDOR =json-for现代-cpp_project JSON_FOR_MODERN_CPP_INSTALL_STAGING = YES #报头专用库JSON_FOR_MODERN_CPP_INSTALL_TARGET = NO JSON_FOR_MODERN_CPP_CONF_OPTS = -DJSON_BuildTests=OFF -DJSON_MultipleHeaders=ON $(eval $(cmake-package )) $(eval $(主机-cmake-包))
再一次,唯一增加的一行是上面最后一行。这导致cmake也为主机构建计算机带来了必要的依赖关系,您的单元测试也是如此,而不仅仅是目标嵌入式Linux板,这正是$(eval $(cmake-package))行所做的。br2-external/package/my-module-name/my-module-name.mk makefile中使用适当的依赖项。对于主机来说,它应该是host-json-for-modern-cpp,而不是json-for-modern-cpp,因为后者只适用于目标板。请注意,json-for-modern-cpp名称似乎是在这里的配置文件中定义的,顺便说一句:https://github.com/buildroot/buildroot/blob/master/package/json-for-modern-cpp/Config.in#L2。
MY_MODULE_NAME_DEPENDENCIES += \一些其他lib2 1\一些其他lib2 2\json代表现代cpp HOST_MY_MODULE_NAME_DEPENDENCIES += \host-其他lib2 1\host一些其他lib2 2\host-json代表现代cpp#这最后一行现在是**固定**!就这样!现在起作用了。
我不知道为什么我必须将$(eval $(host-cmake-package))添加到buildroot文件中,因为在默认情况下,这似乎应该是文件在Buildroot回购中。中的某些内容,不是吗?
https://stackoverflow.com/questions/73302642
复制相似问题