我提供了一个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调用中吗?
假设您使用的是基于图像的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
的别名,以进一步帮助您的开发人员。
我想向Anders回答,虽然以这种方式添加nativesdk-cmake
对我来说很有效,但当我尝试添加nativesdk-python3-numpy
时却不起作用。经过一些谷歌搜索,我发现了这一点,这表明TOOLCHAIN_HOST_TASK
必须使用_append
而不是+=
进行扩展。