Linux conan+cmake管理的项目如何进行多架构编译(x86_64及交叉编译arm64)

这篇具有很好参考价值的文章主要介绍了Linux conan+cmake管理的项目如何进行多架构编译(x86_64及交叉编译arm64)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一 背景知识

Conan 和 CMake 是两个非常流行的跨平台开发工具,它们可以让开发者轻松管理依赖和构建项目,支持多种操作系统和架构。下面是一些关于 conan 和 cmake 的介绍:

  1. Conan
    Conan 是一个用于管理 C++ 依赖项的开源工具。它可以从公共或私有存储库中自动下载和安装依赖项。Conan 可以轻松地管理不同版本的依赖项,并支持多个操作系统和编译器。使用 Conan,开发者可以更加轻松地构建跨平台应用程序。

  2. CMake
    CMake 是一个跨平台的构建系统,它可以自动生成 Makefile、Visual Studio、Xcode 等构建系统所需的文件。CMake 可以让开发者轻松地构建跨平台应用程序,而无需编写复杂的构建脚本。CMake 支持多种编译器和操作系统,并且可以与其他工具(如 conan)配合使用。

  3. Conan 和 CMake 的结合
    Conan 和 CMake 可以很好地结合使用,以便更好地管理依赖项和构建项目。使用 Conan,开发者可以轻松地下载和安装依赖项,并在 CMake 中使用。在使用 CMake 构建项目时,可以使用 Conan 提供的工具来检查依赖项是否已正确安装,并自动下载和安装未安装的依赖项(conan_cmake_install)。这使得开发者可以更加高效和准确地构建跨平台应用程序。

总之,使用 conan + cmake 可以让开发者更加轻松地管理依赖和构建项目,支持多种操作系统和架构,从而使跨平台开发更加容易和高效。

目前,xxx项目已经完成了Mac(x86_64/arm64)、Windows(x86/x64)和Linux(x86_64)三个桌面端系统及相关架构的统一管理和编译。现在,我们正在补充Linux arm64交叉编译的支持,以满足更广泛的需求。

二 如何实现Linux arm64交叉编译

工具 交叉编译本机环境 交叉编译目标环境
CMake CMAKE_HOST_SYSTEM_NAME CMAKE_SYSTEM_NAME
Conan BUILD HOST

在 CMake 中,CMAKE_HOST_SYSTEM_NAME 变量表示编译器运行的本地系统名称,而 CMAKE_SYSTEM_NAME 变量表示目标系统的名称。在交叉编译时,需要将 CMAKE_SYSTEM_NAME 设置为目标系统的名称,以便 CMake 可以正确地生成构建文件。

Conna 要求交叉编译必须指定两个 profile 信息,一个表示 BUILD 环境就是当前编译环境信息,一个表示 HOST 目标系统环境信息。这样它才会启用交叉编译配置。当然我们可以在 CMakeLists.txt 会判断是否指定了 CONAN_PROFILE_BUILD 和 CONAN_PROFILE_HOST,没有指定时我们可以启用自动判断。

通过 CMake 传递 CONAN_PROFILE_BUILD 和 CONAN_PROFILE_HOST 参数,我们就可以自动化将这些配置信息传递给 Conan,无需手动去执行 Conan install 流程,减少出错可能和麻烦的步骤。

1. 交叉编译工具链配置(cmake用)

# CMakeLists.txt
if (UNIX AND NOT APPLE)
    if (TARGET_ARCH STREQUAL "arm64")
        message(STATUS "build Linux arm64")
        set(CMAKE_SYSTEM_NAME Linux)
        set(CMAKE_SYSTEM_PROCESSOR arm64)
        set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
        set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
    else ()
        message(STATUS "build Linux x86_64")
    endif ()
endif ()

TARGET_ARCH变量是自己定义的,用来传递给cmake当前的平台架构:包括x86_64,和arm64

2. conan依赖安装配置(就是上文提到的两个profile)

# CMakeLists.txt
if (NOT EXISTS "${CMAKE_BINARY_DIR}/conan.cmake")
    message(STATUS "Downloading conan.cmake from https://github.com/conan-io/cmake-conan")
    file(DOWNLOAD "https://raw.githubusercontent.com/conan-io/cmake-conan/master/conan.cmake" "${CMAKE_BINARY_DIR}/conan.cmake")
endif ()
include(${CMAKE_BINARY_DIR}/conan.cmake)
if (CONAN_PROFILE_BUILD AND CONAN_PROFILE_HOST)
conan_cmake_install(PATH_OR_REFERENCE .. BUILD missing
                    SETTINGS_HOST build_type=${CMAKE_BUILD_TYPE}
                    SETTINGS_BUILD build_type=${CMAKE_BUILD_TYPE}
                    PROFILE_BUILD ${CONAN_PROFILE_BUILD}
                    PROFILE_HOST ${CONAN_PROFILE_HOST})
else ()
    conan_cmake_autodetect(settings)
    conan_cmake_install(PATH_OR_REFERENCE .. BUILD missing SETTINGS ${settings})
endif ()
  • linux-x86_64 profile
include(default)

[settings]
os=Linux
arch=x86_64
compiler=gcc
compiler.version=7
compiler.libcxx=libstdc++11
compiler.cppstd=14
  • linux-arm64 profile
include(default)

[settings]
os=Linux
arch=armv8
compiler=gcc
compiler.version=7
compiler.libcxx=libstdc++11
compiler.cppstd=14

[env]
CC=aarch64-linux-gnu-gcc
CXX=aarch64-linux-gnu-g++

3. 构建指令 (比如在x86_64平台上交叉编译arm64目标)

  • 构建
    cmake -Bbuild_arm64 -DCMAKE_BUILD_TYPE=Release DTARGET_ARCH=arm64 -DCONAN_PROFILE_BUILD=$(pwd)/.profiles/linux-x86_64 -DCONAN_PROFILE_HOST=$(pwd)/.profiles/linux-arm64

  • 编译
    cmake --build build_arm64 --config Release --parallel 12文章来源地址https://www.toymoban.com/news/detail-491087.html

到了这里,关于Linux conan+cmake管理的项目如何进行多架构编译(x86_64及交叉编译arm64)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • visual studio 编译cmake项目

    当编译出现问题 message(FATAL_ERROR \\\"The C compilern  \\\"${CMAKE_C_COMPILER}\\\"n\\\"       \\\"is not able to compile a simple test program.nIt fails \\\"       \\\"with the following output:n  ${_output}nn\\\"       \\\"CMake will not be able to correctly generate this project.\\\") 控制台提示如下: 1 已为默认配置“x64-Debug”启动 CMake 生成

    2024年02月06日
    浏览(60)
  • CMake编译CUDA项目报错

    configure后显示如下错误 CMake Error at C:/Program Files/CMake/share/cmake-3.26/Modules/CMakeDetermineCompilerId.cmake:751 (message): Compiling the CUDA compiler identification source file “CMakeCUDACompilerId.cu” failed. 同时,注意到下面报错为 C:Program FilesMicrosoft Visual Studio2022CommunityMSBuildMicrosoftVCv170BuildCustomi

    2024年02月06日
    浏览(70)
  • Ubuntu中使用vscode+cmake引用第三方库进行编译调试

    在自己的项目中引用openCV和Eigen库。 opencv和Eigen库的编译安装参见上一篇文章https://blog.csdn.net/qq_41816368/article/details/130090823?spm=1001.2014.3001.5502#t4 其他的第三方库放在工作空间的thirdparty文件夹,项目编译时一起编译,不提前安装。 首先新建一个文件夹作为工作空间 在创建Thir

    2023年04月25日
    浏览(62)
  • Cmake 之Linux库编译

    一 camake第一列,C编译为so库 对应的CmakeList文件 二 Cmake介绍 2.1 CMake 是一个跨平台的项目构建工具,CMake可以生成各种构建系统的配置文件,包括Makefile、Visual Studio项目文件、Xcode项目文件等,可以帮助开发人员简化项目的构建过程,提高开发效率 2.2 CMake执行流程图 2.3 Cmak

    2024年01月21日
    浏览(45)
  • 如何应用项目管理软件进行敏捷开发管理

    敏捷开发(Agile Development)是一种软件开发方法论,强调在不断变化的需求和环境下,通过迭代、协作和自适应的方式来开发软件。敏捷方法的目标是提供更快、更灵活、更高质量的软件交付,以满足客户需求并实现项目成功。 在技术研发团队使用敏捷开发来完成一个迭代时

    2024年02月12日
    浏览(59)
  • 使用CMake交叉编译Arm Linux程序

    注意,工具链文件的指定一定要紧跟cmake命令之后,不能放到 … 后面构建arm架构cmake 工程里新建一个文件叫arm_linux_setup.cmake arm_linux_setup.cmake内容如下

    2024年02月03日
    浏览(57)
  • centos编译升级cmake,痛苦的Linux小白

    环境 root 用户 下载 cmake官网下载地址:https://cmake.org/download/ 获取下载地址, 右击 cmake-3.27.4.tar.gz 命令行输入链接地址,下载 解压 配置编译环境 配置失败,could not find openssl… 原因: 缺少 openssl 的编译依赖 解决: 安装openssl 编译 查看cmake版本 发现还是原来的版本…,用s

    2024年02月09日
    浏览(41)
  • windows下使用microsoft、intel、gnu不同编译器利用cmake和vscode对c++和fortran程序进行编译和调试

    由于编译器支持特性、编译后程序运行速度、安装使用便捷程度等的不同,我们往往会安装多种不同的编译器。对于c++语言主要的编译器有:microsoft、intel、gnu等,对于fortran语言则更多,包括gnu、intel、pgi等等。不同的编译器在一个系统下,往往需要利用一些手段进行区分,

    2024年02月05日
    浏览(59)
  • CMake项目使用ctest+gtest进行单元测试

    随着CMake工具越来越强大便捷,越来越多的C/C++项目转而使用CMake来进行编译管理,它还提供了用于测试的ctest命令来执行项目中编写的单元测试。 本文就以一个实例来介绍如何使用ctest来进行单元测试。 本文实例环境VSCode+MinGW64+CMake+gtest。 需要在MinGW中安装gtest,如果没有安装

    2024年02月05日
    浏览(42)
  • 如何将自己的项目上传到github上,并进行项目管理

    将项目上传到GitHub并进行项目管理是一个多步骤的过程。以下是一个简单的示例,指导您如何完成这一过程: 1. 创建GitHub账户 如果您还没有GitHub账户,请先在 GitHub 上注册一个。 2. 创建新仓库 登录您的GitHub账户。 在GitHub主页的右上角,点击 \\\"+\\\" 图标,然后选择 \\\"New repositor

    2024年02月03日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包