xmake从入门到精通9:交叉编译详解

xmake是一个基于Lua的轻量级现代化c/c 的项目构建工具,主要特点是:语法简单易上手,提供更加可读的项目维护,实现跨平台行为一致的构建体验。

除了win, linux, macOS平台,以及android, ios等移动端平台的内建构建支持,xmake也支持对各种其他工具链的交叉编译支持,本文我们将会详细介绍下如何使用xmake进行交叉编译。

交叉编译工具链简介

通常,如果我们需要在当前pc环境编译生成其他设备上才能运行的目标文件时候,就需要通过对应的交叉编译工具链来编译生成它们,比如在win/macos上编译linux的程序,或者在linux上编译其他嵌入式设备的目标文件等。

通常的交叉编译工具链都是基于gcc/clang的,大都具有类似如下的结构:

/home/toolchains_sdkdir
   - bin
       - arm-linux-armeabi-gcc
       - arm-linux-armeabi-ld
       - ...
   - lib
       - libxxx.a
   - include
       - xxx.h

每个工具链都有对应的include/lib目录,用于放置一些系统库和头文件,例如libc, stdc 等,而bin目录下放置的就是编译工具链一系列工具。例如:

arm-linux-armeabi-ar
arm-linux-armeabi-as
arm-linux-armeabi-c  
arm-linux-armeabi-cpp
arm-linux-armeabi-g  
arm-linux-armeabi-gcc
arm-linux-armeabi-ld
arm-linux-armeabi-nm
arm-linux-armeabi-strip

其中arm-linux-armeabi-前缀就是cross,通过用来标示目标平台和架构,主要用于跟主机自身的gcc/clang进行区分。

里面的gcc/g 就是c/c 的编译器,通常也可以作为链接器使用,链接的时候内部会去调用ld来链接,并且自动追加一些c 库。cpp是预处理器,as是汇编器,ar用于生成静态库,strip用于裁剪掉一些符号信息,使得目标程序会更加的小。nm用于查看导出符号列表。

自动探测和编译

如果我们的交叉编译工具链是上文的结构,xmake会自动检测识别这个sdk的结构,提取里面的cross,以及include/lib路径位置,用户通常不需要做额外的参数设置,只需要配置好sdk根目录就可以编译了,例如:

$ xmake f -p cross --sdk=/home/toolchains_sdkdir
$ xmake

其中,-p cross用于指定当前的平台是交叉编译平台,--sdk=用于指定交叉工具链的根目录。

注:我们也可以指定-p linux平台来配置交叉编译,效果是一样的,唯一的区别是额外标识了linux平台名,方便xmake.lua里面通过is_plat("linux")来判断平台。

这个时候,xmake会去自动探测gcc等编译器的前缀名cross:arm-linux-armeabi-,并且编译的时候,也会自动加上链接库头文件

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值