Yocto SDK与cmake工具链文件

15
我提供一个Yocto SDK来交叉编译嵌入式目标的应用程序,该应用程序本身使用CMake进行构建。SDK设置脚本提供了许多必要的环境变量(例如交叉编译器和sysroot的位置等),这已足以构建应用程序。
然而,最近应用程序依赖于Boost库(通过CMakeLists.txt中的find_package(Boost REQUIRED)命令)。现在CMake抱怨无法找到该库,即使它已经安装在SDK sysroot中。但是,如果直接在Yocto中构建应用程序,则可以正常工作。
经过一些研究发现,Yocto会生成一个toolchain.cmake文件,该文件被添加到cmake调用中。在此文件中,设置变量CMAKE_FIND_ROOT_PATH,CMake需要查找库。使用这样的工具链文件,我也可以使用SDK构建。
现在我想知道Yocto是否提供任何机制来导出带有SDK的工具链文件。或者,如果SDK提供一个脚本或其他东西,在SDK构建主机上自动创建一个工具链文件。
或者,我只需告诉SDK用户手动创建工具链文件并将其添加到其cmake调用中吗?
2个回答

21
假定您正在使用基于图像的 SDK,即使用 bitbake <image> -c populate_sdk 进行构建,请将以下内容添加到 image.bb 中即可解决问题:
TOOLCHAIN_HOST_TASK += "nativesdk-cmake"

这应该会在SDK中为你提供一个OEToolchainConfig.cmake文件。在引入SDK环境文件之后,cmake将成为一个别名,指向cmake -DCMAKE_TOOLCHAIN_FILE=$OECORE_NATIVE_SYSROOT/usr/share/cmake/OEToolchainConfig.cmake以进一步帮助你的开发人员。


还有一个问题 - 在使用 bitbake meta-ide-support 构建时,是否也可以创建此文件?我尝试创建了一个名为 meta-ide-support.bbappend 的文件,其中设置了 TOOLCHAIN_HOST_TASK,但似乎没有任何作用。 - Georg P.
从未尝试过 meta-ide-support。它是否构建了工具链?否则,TOOLCHAIN_HOST_TASK 将无法工作。为什么不将其添加到您的 SDK 构建中,而不是使用 meta-ide-support - Anders
在大多数情况下,应用程序是构建在同一台机器上的,在该机器上完整的Yocto构建可用。在这些情况下,使用位于Yocto构建目录内部的工具链和系统根比并行安装完整的SDK更容易。 meta-ide-support创建了一个脚本,我可以从Yocto构建目录外部源代码。如果该脚本还设置到OEToolchainConfig.cmakecmake别名的路径,那就太好了。 - Georg P.
我个人认为使用SDK是一个好主意,但你的情况可能会有所不同。你可能需要对系统进行一些修改才能实现你想要的功能。另外,当你更新到Pyro或更高版本时(pyro将在今年春季发布),很可能需要改变你的工作流程。在Pyro中,将不再有全局sysroot,而是添加了特定于配方的sysroots。 - Anders
我找不到 /usr/share/cmake 目录,但是 /usr/share/cmake-3.10 存在。我该怎么办?我的镜像中已经添加了 TOOLCHAIN_HOST_TASK 的 nativesdk-cmake。 - mozcelikors

1
我想补充Anders的回答,在我尝试添加时,以这种方式添加很好用,但不起作用。 经过一些搜索,我发现this,建议使用_append而不是+=扩展TOOLCHAIN_HOST_TASK。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接