带有cmake工具链文件的Yocto SDK

带有cmake工具链文件的Yocto SDK,sdk,cmake,yocto,toolchain,Sdk,Cmake,Yocto,Toolchain,我提供了一个YoctoSDK,用于为嵌入式目标交叉构建应用程序。应用程序本身是使用CMake构建的。SDK安装脚本提供了许多必要的环境变量(如交叉编译器的位置、sysroot等),到目前为止,这些变量足以构建应用程序 但是,由于最近应用程序依赖于Boost库(通过CMakeLists.txt中的命令find_-package(Boost-REQUIRED))。现在CMake抱怨说它找不到库,即使它安装在SDK sysroot中。但是如果我直接在Yocto中构建应用程序,它就可以正常工作 经过一些

我提供了一个YoctoSDK,用于为嵌入式目标交叉构建应用程序。应用程序本身是使用CMake构建的。SDK安装脚本提供了许多必要的环境变量(如交叉编译器的位置、sysroot等),到目前为止,这些变量足以构建应用程序

但是,由于最近应用程序依赖于Boost库(通过CMakeLists.txt中的命令
find_-package(Boost-REQUIRED)
)。现在CMake抱怨说它找不到库,即使它安装在SDK sysroot中。但是如果我直接在Yocto中构建应用程序,它就可以正常工作

经过一些研究,Yocto生成了一个
toolchain.cmake
文件,该文件被添加到cmake调用中。在此文件中,设置了变量
CMAKE\u FIND\u ROOT\u PATH
,CMAKE需要该变量来查找库。使用这样的工具链文件,我还可以使用SDK进行构建

现在我想知道Yocto是否提供了任何机制来使用SDK导出这样的工具链文件。或者,如果SDK提供了一个脚本或其他东西,可以直接在SDK构建主机上自动创建工具链文件


或者我应该告诉SDK的用户手动创建一个工具链文件并将其添加到他们的cmake调用中吗?

假设您使用的是基于图像的SDK,即使用
bitbake-c populate_SDK构建它,将以下内容添加到
图像中。bb
应该修复它:

TOOLCHAIN_HOST_TASK += "nativesdk-cmake"

这将在SDK中为您提供一个
OEToolchainConfig.cmake
文件。在获取SDK环境文件之后,
cmake
将是
cmake-DCMAKE\u TOOLCHAIN\u FILE=$OECORE\u NATIVE\u SYSROOT/usr/share/cmake/OEToolchainConfig.cmake
的别名,以进一步帮助您的开发人员。

我想补充Ander的回答是,虽然我用这种方式添加
nativesdk cmake
对我来说效果很好,但在我尝试添加时它并没有起作用
nativesdk-python3-numpy
。通过谷歌搜索,我发现,
toolschain\u HOST\u TASK
必须使用
\u append
而不是
+=

来扩展,还有一个问题-在使用
bitbake meta ide支持构建时是否也可以创建此文件?我试图创建一个文件
meta-ide-support.bbappend
,用于设置
工具链\u-HOST\u任务
,但它似乎没有任何作用。从未尝试过
meta-ide-support
。它是否甚至构建了一个工具链
,否则,
工具链\u主机\u任务'将无法工作。为什么不将其添加到SDK构建中,而不是将其添加到meta ide支持中呢?在大多数情况下,应用程序构建在同一台机器上,在这台机器上可以使用完整的Yocto构建。在这些情况下,使用位于Yocto build目录中的工具链和sysroot比并行安装完整的SDK更容易<代码>meta ide支持
创建了一个脚本,我可以从Yocto build目录之外获取该脚本以进行交叉编译。如果该脚本还设置到
OEToolchainConfig.cmake
cmake
别名的路径,那就太好了。好吧,我个人认为使用SDK是个好主意,但您的里程可能会有所不同。您可能需要对系统进行一些黑客攻击,以实现您想要的功能。作为补充说明,一旦更新到Pyro或更高版本(Pyro将于今年春天发布),您很可能不得不更改您的工作流程。在Pyro中,不会有全局系统根,因为已经添加了特定于配方的系统根。/usr/share/cmake对我来说不存在,而/usr/share/cmake-3.10存在。我能做什么?我已经在我的图像中添加了nativesdk cmake和TOOLCHAIN_HOST_任务。