交叉编译基本过程

编译脚本设置交叉编译用到的环境

该环境变量主要用于cmake编译时,通过获取环境变量的值来判断取链接哪些库等作用.因为环境变量是系统中进程共享的数据.
如:

export CROSS_COMPILING_TYPE = "ARM_PLATFORM"

需要一个ToolChain_xxx.make的文件

该文件主要是对进行交叉编译时,所使用的交叉编译工具链的说明,所谓交叉编译工具链就是我们要生成目标平台的可执行文件或这库时用到的编译链接工具的集合.
该文件中我们会定义很多变量,包括编译工具的路径,所用到的库的引用路径,所用到的头文件的包含路径等信息,cmake会交这些所有变量保存下来,在之后的CMakeLists.txt中就可以引用这些变量了.

在这里简单的罗列几条,一般这个文件由sdk提供方提供:

SET(CMAKE_CXX_COMPILER sdk_path_name/g++)
......
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

指定使用的XXX.cmake文件

cmake  -DCMAKE_TOOLCHAIN_FILE = PATH_OF_.XXX.cmake   cmake_path/

根据之前设置的环境变量来设置宏,因为代码中肯定会由于不同平台有一些宏开关

//编译时加-D选项
ADD_DEFINITIONS("-DARM_CODE")

然后根据环境变量的值判断当前编译的是哪个平台的代码,应当去链接什么库.例如:CMakeLists.txt中

IF($ENV{CROSS_COMPILING_TYPE} MATCHES "ARM_PLATFORM")
    TARGET_LINK_LIBRARIES(...)
ELSE()
    TARGET_LINK_LIBRARIES(...)
ENDIF()

写代码是对于不同平台实现时代码以及代码引用的头文件也不一样,所以我们一般用宏开关

#ifdeine ARM_CODE
#include <arm/a.h>
#else
#include <x86/a.h>
#endif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值