首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我们如何将${BASEWORK}目录从Bitbake配方传递到CMAKE,以便使用CMAKE中的find库函数?

在Bitbake配方中,您可以通过设置变量来传递路径信息到CMake。以下是将${BASEWORK}目录从Bitbake传递到CMake的步骤:

步骤 1: 在Bitbake配方中设置变量

首先,在您的Bitbake配方文件(通常是.bb文件)中,您需要定义一个变量来表示${BASEWORK}目录的路径。例如:

代码语言:txt
复制
BASEWORK_DIR = "${WORKDIR}/base_work"

这里,${WORKDIR}是Bitbake为每个配方自动设置的默认工作目录。

步骤 2: 将变量传递给CMake

接下来,您需要在Bitbake配方中将这个变量传递给CMake。这可以通过设置EXTRA_OECMAKE变量来实现,它允许您向CMake传递额外的参数。例如:

代码语言:txt
复制
EXTRA_OECMAKE += "-DBASEWORK_DIR=${BASEWORK_DIR}"

步骤 3: 在CMake中使用传递的变量

在CMakeLists.txt文件中,您可以使用find_libraryfind_path函数来查找库或头文件,同时使用传递过来的${BASEWORK_DIR}变量。例如:

代码语言:txt
复制
find_library(MY_LIBRARY NAMES mylib PATHS ${BASEWORK_DIR}/lib)
find_path(MY_INCLUDE_DIR NAMES mylib.h PATHS ${BASEWORK_DIR}/include)

示例代码

假设您有一个Bitbake配方文件my-package.bb

代码语言:txt
复制
SUMMARY = "My package example"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

SRC_URI = "file://src"

BASEWORK_DIR = "${WORKDIR}/base_work"

EXTRA_OECMAKE += "-DBASEWORK_DIR=${BASEWORK_DIR}"

S = "${WORKDIR}/src"

inherit cmake

然后在src/CMakeLists.txt中:

代码语言:txt
复制
cmake_minimum_required(VERSION 3.10)
project(MyProject)

find_library(MY_LIBRARY NAMES mylib PATHS ${BASEWORK_DIR}/lib)
find_path(MY_INCLUDE_DIR NAMES mylib.h PATHS ${BASEWORK_DIR}/include)

include_directories(${MY_INCLUDE_DIR})
target_link_libraries(MyProject ${MY_LIBRARY})

这样,当Bitbake构建您的配方时,${BASEWORK_DIR}变量将被传递给CMake,并且CMake可以使用这个变量来定位库和头文件。

注意事项

  • 确保${BASEWORK_DIR}路径在Bitbake构建环境中是有效的。
  • 如果${BASEWORK_DIR}包含空格或其他特殊字符,可能需要额外的引号或转义处理。
  • 在实际应用中,可能需要根据具体情况调整路径和变量名。

通过这种方式,您可以有效地在Bitbake和CMake之间传递路径信息,从而实现更灵活的构建配置。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何配置 OP-TEE

OP-TEE 可以将内存扩展到完整的 SYSRAM。当使用分页器时,代码的第二部分被加载到受限制的安全可访问区域中的 DDR(可分页部分)中。...唤醒源管理 RCC services 访问受限 OPP 请求管理 校准触发 4 使用分发包构建 分发包提供了从相关 bitbake 目标构建以下 OP-TEE 组件的方法: bitbake...5.3.2 构建非安全( non-secure)组件 将 OP-TEE 源文件下载到基目录中,并在基目录中创建一个 CMakeLists.txt 文件,其中列出了要通过 CMake 构建的所有包。.../target/ 目录中。 另请注意,stm32mp1 期望工具 tee-supplicant 位于目录 /usr/bin 中,而 CMake 将其安装在目录 /usr/sbin 中。...7.2 SD卡更新 需要复制到目标文件系统的 OP-TEE 文件安装在本地目录 ./target/ 中。

1K30

CMake 秘籍(五)

但是,使用 CMake,我们可以组织项目,以便在系统上找不到依赖项时自动获取和构建它们。...从根目录的CMakeLists.txt配置项目保证了依赖项始终得到满足,无论是使用系统上预装的 Boost 还是我们作为子项目构建的 Boost: find_package(Boost 1.61 REQUIRED...在本章中,我们将展示如何将用不同编译型(C、C++和 Fortran)和解释型(Python)语言编写的代码集成到一个可移植和跨平台的解决方案中。...这是一个一行代码:我们创建一个新的库目标,该子目录中的源文件将被编译到这个目标中。...我们从第 3 个配方,构建和链接共享和静态库,在第一章,从简单可执行文件到库中已经知道,CMake 接受以下选项作为add_library的第二个有效参数: STATIC,用于创建静态库;即,用于链接其他目标

73120
  • CMake 秘籍(二)

    在本配方中,我们的目标是检测主机系统信息,使用预处理器定义将其传递给 C++源代码,并将信息打印到输出。...find_path来查找包含指定文件的目录 find_program来查找一个程序 你可以使用--help-command命令行开关来打印任何 CMake 内置命令的文档到屏幕上。...有时需要将-D PYTHON_EXECUTABLE、-D PYTHON_LIBRARY和-D PYTHON_INCLUDE_DIR传递给 CMake CLI,以便找到所有必需的组件并将它们固定到完全相同的版本...正如我们在第 3 个配方中提到的,构建和链接静态和共享库,在第一章,从简单的可执行文件到库中,IMPORTED库是伪目标,它们完全编码了外部依赖的使用要求。...本配方将展示如何找到 Eigen 库,并指示它使用 OpenMP 并行化并将部分工作卸载到 BLAS 库。 准备就绪 在本例中,我们将编译一个程序,该程序分配一个随机方阵和从命令行传递的维度的向量。

    62520

    CMake 秘籍(三)

    在本章中,我们将演示如何将测试集成到 CMake 构建结构中,使用流行的测试库和框架,并牢记以下目标: 让用户、开发者和持续集成服务轻松运行测试套件。...而且,就像年轻的卡尔·弗里德里希·高斯被他的老师测试从 1 到 100 求和所有自然数一样,我们将要求我们的代码做同样的事情——尽管没有使用高斯所用的聪明分组技巧。...: target_link_libraries(cpp_test Catch) 我们从第一章,从简单可执行文件到库中的食谱 3,构建和链接静态和共享库的讨论中回忆起,INTERFACE库是 CMake...我们从第一章,从简单可执行文件到库中的第三部分,构建和链接静态和共享库的讨论中回忆起,IMPORTED库是 CMake 提供的伪目标,用于表示预先存在的依赖关系及其使用要求。...由于我们传递了ALL参数,该目标将始终被执行。COMMAND参数允许您指定要执行的命令。在本例中,我们希望提取存档并将提取的目录重命名为eigen-3.3.4。

    60320

    CMake 秘籍(四)

    在本方法中,我们将使用一个相对简单的 Python 脚本,下面我们将详细介绍。该脚本将读取print_info.c.in,并使用从 CMake 传递给 Python 脚本的参数替换文件中的占位符。...这是通过使用-PCLI 开关来实现的,以传递脚本的位置。请注意,我们可以使用-DCLI 开关传递选项,就像我们通常所做的那样。...这意味着我们使用CMakeLists.txt文件的树构建了我们的项目,从一棵库的树开始。这种方法对许多项目来说是典型的,并且它可以扩展到大型项目,而不需要在目录之间携带全局变量中的源文件列表。...另请参见 我们注意到,从 CMake 3.12 版本开始,OBJECT库是组织大型项目的另一种可行方法。我们对示例的唯一修改将是在库的CMakeLists.txt文件中。...正如我们将在本配方中看到的,现代 CMake 允许我们以非常紧凑和模块化的方式表达配置和构建过程。作为一个例子,我们将使用前两个配方中的基本细胞自动机,现在移植到 Fortran。

    25120

    CMake 秘籍(七)

    我们确保通过使用find_package来满足依赖关系。请注意,FindSphinx.cmake模块还不是标准的 CMake 模块;它的副本包含在项目源代码的cmake子目录下。...要查看当前平台上所有可用的生成器列表,请输入以下内容: $ cmake -G 在本章中,我们不会遍历所有可用的生成器,但我们注意到本书中的大多数配方都使用Unix Makefiles、MSYS Makefiles...然后,通过指向CMAKE_TOOLCHAIN_FILE到工具链文件来配置代码(在本例中,使用了从源代码构建的 MXE 编译器): $ mkdir -p build $ cd build $ cmake...从 1 个线程增加到 2 个线程,我们观察到运行时间从 2.6 秒减少到 1.3 秒。有关工具链文件的讨论,请参阅之前的配方。 还有更多 可以为一组目标平台进行交叉编译,例如 Android。...在本食谱中,我们将测量测试覆盖率并将其报告给 CDash 仪表板,以便我们能够逐行浏览测试覆盖率分析,以识别未测试或未使用的代码。

    20300

    CMake 秘籍(六)

    本章的节涵盖了以下图中概述的安装时操作: 我们将引导你完成精简一个简单的 C++项目安装的各个步骤:从确保项目中构建的重要文件被复制到正确的目录,到确保依赖于你的工作的其他项目可以使用 CMake 检测到它...这种依赖是有条件的,如果找不到 UUID 库,我们将通过预处理器排除使用它的代码。代码被适当地组织到自己的src子目录中。...为什么我们选择这种方法而不是在第 3 个菜谱中展示的使用OBJECT库的方法,即“构建和链接静态和共享库”,在第一章“从简单的可执行文件到库”中?OBJECT库负责编译库的第一步:从源代码到对象文件。...SOURCE_DIR选项指定源代码位于src子目录中。我们还传递了所有适当的 CMake 参数来配置我们的项目。...在新创建的目录中,我们从本地路径运行pipenv install。

    40800

    CMake 秘籍(八)

    我们的目标将是逐步展示如何将一个非平凡的项目移植到 CMake,并讨论这样的过程中的步骤。...,以便将它们放置在构建目录下,而不是源代码树中。...这样做的好处是更灵活和更局部的范围。在我们这里的例子中,代价可能是不必要的代码重复。 移植测试 现在让我们讨论如何将测试从参考构建移植到我们的 CMake 构建。...转换项目到 CMake 时的总结和常见陷阱 让我们总结一下本章我们取得了哪些成就以及我们学到了什么。 代码变更总结 在本章中,我们讨论了如何将项目移植到 CMake。...全局变量是代码异味:这在任何编程语言中都是如此,CMake 也不例外。跨越 CMake 文件的变量,特别是从叶子到父级CMakeLists.txt文件“向上”传递的变量,表明代码存在问题。

    19810

    面向 C++ 的现代 CMake 教程(四)

    在本章中,我们将介绍如何导出目标,以便另一个项目可以在不安装的情况下使用它们,以及如何安装我们的项目,以便它们可以很容易地被系统上的任何程序使用。...在包含助手工具模块后,我们调用生成命令并将文件写入符合find_package()所需模式的构建树中。在这里,我们故意省略了VERSION关键词,以便从PROJECT_VERSION变量中读取版本。...就这样——我们的包已经完全配置好了。 在下一节中,我们将学习什么是组件以及如何将它们与包一起使用。...认识到不同用户可能需要我们包的不同部分,我们发现了如何将工件和动作分组在安装组件中,以及它们与 CMake 包组件的区别。...认识到不同用户可能需要我们包的不同部分,我们发现了如何将工件和动作分组在安装组件中,以及它们与 CMake 包组件的区别。

    68200

    面向 C++ 的现代 CMake 教程(三)

    很可能 CMake 的作者已经将文件与 CMake 本身捆绑在一起(这些被称为find-modules,以便与配置文件区分开来)。...,您的构建系统需要在操作系统中找到pkg-config可执行文件,运行它几次,并提供适当的参数,然后将响应存储在变量中,以便稍后传递给编译器。...为了使用PQXX,宿主机器还需要 PostgreSQL。在我们的查找模块中使用另一个查找模块是完全合法的,但我们应该将REQUIRED和QUIET标志传递给它(以便嵌套搜索与外层搜索行为一致)。...通过提供COPYONLY关键字,我们只是将我们的config.yaml复制到构建树中,这样可执行文件在运行时能够找到它。 添加 yaml-cpp 仓库的子目录。...在图 7.2中,你可以看到这个过程的详细信息: 调用FetchContent_GetProperties(),从全局变量将FetchContent_Declare()设置的配置从全局变量传递到局部变量

    67200

    【系列教程】 C++项目开发配置最佳实践(vscode远程开发配置、格式化、代码检查、cmake管理配置)

    我们需要更新path变量,将clang-format的执行文件夹添加到path变量中:找到clang-format执行文件夹sudo find / -name *clang-format*......(具体使用方法可参考下面的cmake写法)cmake实现代码工程化随着项目越来越复杂,模块越来越多,我们继续手动写makefile去构建项目显然不太合适,为了方便管理、构建复杂项目,使用cmake作为构建工具是个不错的选择...服务端目录,client目录是CProxy客户端目录,server和client分别能构建出可执行的程序;lib目录则存放一些被server和client调用的库函数。...目标文件中target_link_libraries(lib pthread)// client/CMakeLists.txt# 将client目录下的所有源文件都存储到SOURCE_DIR变量中。...ccache安装yum install ccache结合cmake使用在根目录的CMakeLists.txt加上下面这段代码find_program(CCACHE_FOUND ccache)if(CCACHE_FOUND

    3.4K30

    NDK开发(一) :NDK入门指南

    CMake 使用 lib库名称.so 的规范来为库文件命名,库名称即为我们定义的 native-lib。不过我们在Java代码中加载时,还是使用我们定义的库名称 native-lib。...Gradle 使用编译脚本将源代码导入您的 Android Studio 项目并将原生库(.so文件)打包到 APK 中。 重新创建一个 Basic Activity的工程。...将 find_library() 命令添加到您的 CMake 构建脚本中以定位 NDK 库。...以 Android 特定的日志支持库 为例,为了确保您的原生库可以在 log 库中调用函数,您需要使用 CMake 构建脚本中的 target_link_libraries()命令关联库: add_library...在您构建应用时,Gradle 会以依赖项的形式运行 CMake 或 ndk-build,并将共享的库打包到您的 APK 中。

    97440

    面向 C++ 的现代 CMake 教程(一)

    本章还解释了如何结构化一个项目,以便它可以被测试。 第七章,使用 CMake 管理依赖项,解释了现代 CMake 中可用的依赖管理方法。.../build目录中(如果缺失则创建)生成一个构建系统,该构建系统来源于./project目录中的源代码。 我们可以省略一个参数,cmake会“猜测”我们打算使用当前目录。但是,要小心。...安装项目 当构建工件时,用户可以将它们安装到系统中。通常,这意味着将文件复制到正确的目录中,安装库,或者从 CMake 脚本中运行一些自定义安装逻辑。.../,则使用-B或作为cmake命令的最后一个参数来指定此目录。 建议您的项目包括一个安装阶段,允许您将最终工件放在系统中的正确位置,以便可以删除用于构建的所有临时文件。...是的,有时这将是唯一能完成工作的事情,但更多的时候,我们可以用一些更简单的东西应付过去。 我们已经从掌握命令行部分了解到,我们可以使用-P选项执行脚本:cmake -P script.cmake。

    1.3K01

    云课五分钟-03第一个开源游戏复现-贪吃蛇

    运行游戏:当编译完成后,您将得到一个可执行的游戏二进制文件。在终端中导航到游戏二进制文件所在的目录,并运行该文件。通常,您可以使用以下命令运行游戏: bash ....变量中,以便CMake能够找到SDL2相关的模块。...file(GLOB SRC src/*.c) 使用GLOB函数将src目录下的所有.c源文件存储到SRC变量中。...file(COPY res DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) 这行代码将res目录(通常是资源目录)复制到运行时输出目录。...此外,我们还讨论了游戏的许可和来源问题,以确保用户在使用和重用游戏资源时能够遵守相应的许可规定。对于已知的问题,我们也进行了列举,以便用户了解游戏的当前限制和问题,并可能有助于社区找到解决方案。

    34030

    cmake快速入门「建议收藏」

    五、处理多源文件目录的方法 CMake处理源代码分布在不同目录中的情况也十分简单。现假设我们的源代码分布情况如下: 其中 src 目录下的文件要编译成一个链接库。...六、在工程中查找并使用其他程序库的方法 在开发软件的时候我们会用到一些函数库,这些函数库在不同的系统中安装的位置可能不同,编译的时候需要首先找到这些软件包的头文件以及链接库所在的目录以便生成编译选项...4行表示到目录 ....第8行使用命令 FIND_PACKAGE 进行查找,这条命令执行后 CMake 会到变量 CMAKE_MODULE_PATH 指示的目录中查找文件 Findlibdb_cxx.cmake 并执行。...: 7、使用 cmake 生成 debug 版和 release 版的程序 在 Visual Studio 中我们可以生成 debug 版和 release 版的程序,使用 CMake 我们也可以达到上述效果

    1.2K60

    万字总结编译利器CMake,从入门到项目实战演练

    我们也要添加一个另外的头文件搜索目录,使得MathFunctions/mysqrt.h可以被搜索到。最后的改变就是将新的库加到可执行程序中。...添加生成的文件和生成器(步骤 5) 在这一节当中,我们会告诉你如何将一个生成的源文件加入到应用程序的构建过程中。在此例中,我们会创建一个预先计算好的平方根的表,并将这个表编译到应用程序中去。...利用使用要求的主要命令是: 目标编译定义 目标编译选项 目标包含目录 目标链接库 让我们从第2步中重构代码,以利用现代的CMake方法编写使用要求。...在"(第7步)构建安装程序"期间,我们添加了打包此资料的功能,以便可以将其分发给其他人。 下一步是添加必要的信息,以便其他CMake项目可以使用我们的项目,无论是从构建目录,本地安装还是打包的文件。...至此,我们已经正确地打包了CMake所需的目标信息,但仍然需要生成MathFunctionsConfig.cmake,以便CMake find_package命令可以找到我们的项目。

    1.3K00

    Ubuntu下编译安装OpenCV 2.4.13以及Python调用OpenCV方法

    一、依赖包的安装 1. build-essential 软件包,为编译程序提供必需软件包的列表信息,这样软件包才知道头文件、库函数在哪里。...安装cmake sudo apt-get install cmake 4.安装pkg-config,它是一个提供从源代码中编译软件时查询已安装的库时使用的统一接口的计算机软件。...解压后进入opencv的目录。 1. 使用cmake来检测编译环境以及生成makefile以及其他project信息,在使用cmake过程可以设置一些参数。...CMAKE_BUILD_TYPE=RELEASE表示release版本 CMAKE_INSTALL_PREFIX=/usr/local表示安装的目录,其中包含include等头文件...五、Python使用opencv 1 先用which python找到python的安装目录(每个人的不同,可以自行更改),只需要把opencv编译的cv2.so和原始的cv.py拷贝到python

    1.7K10

    Qt | CMake(Qt5 VS Qt6)

    点击上方"蓝字"关注我们01、CMake>>>CMake是一个简化跨不同平台开发项目构建过程的工具。CMake自动生成生成系统,如Makefiles和Visual Studio项目文件。...CMake是一个自带的第三方工具证明文件。CMake 备忘清单02、如何使用CMake3.1.0带Qt 5>>>开始find_package找到Qt附带的库和头文件。...该命令自动添加适当的包含目录、编译定义、独立于位置的代码标志以及到qtmain.lib例如,Windows上的库。...将库目标的名称传递给target_link_libraries以使用相应的库。注意:从Qt 5.15开始,CMake目标也可以作为Qt::Core、Qt::Gui等等使用。...如果没有设置,第一个find_package调用将定义默认版本。这个功能是在Qt 5.15中添加的。QT_LIBINFIX用-libinfix配置Qt时,保存库名中使用的中缀的字符串。

    17410

    Xmake 和 CC++ 包管理

    但是这完全没有关系,因为我们可以使用任意包仓库中的包。 如果在 CMake 中使用 vcpkg,我们只能使用 1859 个包。 如果在 CMake 中使用 conan,我们只能使用 1218 个包。...│ └── main.c ├── test.lua └── xmake.lua foo 目录下是一个使用 CMake 维护的静态库,而根目录下使用了 Xmake 来维护,我们可以在 xmake.lua...例如,我们从 xmake-repo 仓库中挑选一个使用 meson 构建的包作为例子: package("harfbuzz") set_sourcedir(path.join(os.scriptdir...:Skia with GN 在 Xmake 中查找使用 CMake/C++ 包 现在 CMake 已经是事实上的标准,所以 CMake 提供的 find_package 已经可以查找大量的系统库和模块...除了从 Xmake 官方维护的存储库安装软件包之外,我们也可以直接在 CMake 中使用它来安装来自第三方仓库的包,只需将仓库名称添加为命名空间即可。

    3K10
    领券