使用cmake工具链文件

时间:2017-01-31 18:28:23

标签: sdk cmake yocto toolchain

我提供了一个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 个答案:

答案 0 :(得分:10)

假设您正在使用基于图片的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的别名,以进一步帮助您的开发人员。

答案 1 :(得分:0)

我想补充一下Anders的回答,尽管以这种方式添加nativesdk-cmake对我来说非常有用,但是当我尝试添加nativesdk-python3-numpy时却不起作用。经过一番谷歌搜索之后,我发现this,建议TOOLCHAIN_HOST_TASK必须使用_append而不是+=进行扩展。