如何结合conan_toolchain.cmake和yocto OEToolchainConfig.cmake?

问题描述 投票:0回答:1

我有一个 C++ 项目,正在使用 yocto sdk 进行交叉编译。 我开始使用 conan 2.0 作为包管理器来为我的 c++ 项目获取第三方库。

我使用 cmake 生成器在项目的根目录下创建了一个 conanfile.txt:

[generators]
CMakeDeps
CMakeToolchain

我还创建了一个 hostbuild 配置文件:

  • conan_profile_cross_build
[settings]
arch=x86_64
build_type=Release
compiler=gcc
compiler.cppstd=gnu17
compiler.libcxx=libstdc++11
compiler.version=12
os=Linux
  • conan_profile_cross_host
[settings]
arch=armv8
build_type=Release
compiler=gcc
compiler.cppstd=gnu17
compiler.libcxx=libstdc++11
compiler.version=12
os=Linux

要使用它,我运行

conan install
并将结果输出到稍后将由 cmake 使用的构建文件夹中。

conan install /src --profile:build=conan_profile_cross_build "
            f"--profile:host=conan_profile_cross_host "
            f" --build=missing --output-folder=build 

问题

为了让 cmake 找到依赖项,您必须使用工具链文件调用 cmake:

cmake -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake

但是,当使用 yocto sdk 构建时,您需要获取环境文件:

source environment-setup-armv8a-enchanted_tools-linux
,它创建了一个 cmake 别名 已经将
CMAKE_TOOLCHAIN_FILE
设置为
OEToolchainConfig.cmake
,它位于 sdk 内部的某个位置。

cmake 只允许一个工具链文件,所以我不能同时使用它们。

我在conan文档中看到你应该编辑

OEToolchainConfig.cmake
,我确实这样做了,但它并没有解决我只能选择一个工具链文件的问题。

问题

我怎样才能仍然使用sdk并允许cmake找到conan提供的包? 也许楼主柯南简介里有什么可做的? 或者这个工作流程不是一个好主意,我应该直接在 yocto sdk 中安装依赖项? 我也在本机 ubuntu Linux 桌面上编译这个项目,在这里 conan 工作得很好。 这个想法是在将新的依赖项集成到 yocto 并重新生成整个 sdk 之前,轻松测试新的依赖项。

cmake yocto conan-2
1个回答
1
投票

Conan 允许通过配置选项包含第二个工具链。 我在

host
个人资料中添加了此内容:

[conf]
tools.cmake.cmaketoolchain:user_toolchain="/home/yoctouser/sdk/sysroots/x86_64-etelsdk-linux/usr/share/cmake/OEToolchainConfig.cmake"]

我实际上不需要编辑

OEToolchainConfig.cmake
文件。

© www.soinside.com 2019 - 2024. All rights reserved.