带有 cmake 工具链文件的 Yocto SDK
Yocto SDK with cmake toolchain file
我提供了一个 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
时却不起作用。经过一番谷歌搜索后,我发现 this,建议必须使用 _append
而不是 +=
.
来扩展 TOOLCHAIN_HOST_TASK
我提供了一个 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
时却不起作用。经过一番谷歌搜索后,我发现 this,建议必须使用 _append
而不是 +=
.
TOOLCHAIN_HOST_TASK