因为嵌入式开发,我接触的都是交叉编译。即编译好的可执行程序并不是在本机运行,而是在目标机上跑。因此,我在使用cmake的时候,也需要交叉编译。

更多信息请参看:cmake官网

CMake给交叉编译预留了一个很好的变量即CMAKE_TOOLCHAIN_FILE,它定义了一个文件的路径,这个文件即toolChain,里面set了一系列你需要改变的变量和属性,包括C_COMPILER,CXX_COMPILER。CMake为了不让用户每次交叉编译都要重新输入这些命令,因此它带来toolChain机制,简而言之就是一个cmake脚本,内嵌了你需要改变以及需要set的所有交叉环境的设置。

这里面也牵扯了一些相关的变量设置,在这里我通过自己的项目,简单介绍下几个比较重要的:

set(CMAKE_ASM_COMPILER ccmips)

set(CMAKE_SYSTEM_NAME Generic)

set(UNIX True CACHE BOOL "Archiver")

set(CMAKE_C_COMPILER ccmips)

set(CMAKE_CXX_COMPILER c++mips)

set(CMAKE_AR armips CACHE FILEPATH "Archiver")

set(CMAKE_RANLIB ranlibmips CACHE FILEPATH "Archiver")

set(CMAKE_LINKER ldmips CACHE FILEPATH "Archiver")

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

set(CMAKE_FIND_ROOT_MODE_LIBRARY ONLY)

add_compile_options(-mno-branch-likely -mips64 -nostdinc -mabi=n32 -mgp64 -EL -fno-builtin -fno-zero-initialized-in-bss -fno-common -Wall -G8 -MD -O2 -G 8 -D_VSB_CONFIG_FILE="${CONFIG_H}/lib_smp/h/config/vsbConfig.h" )

#精简后好的

add_definitions(-DCPU=_DELTA_MIPSI64 -DINET -DTOOL_FAMILY=gnu -DTOOL=gnule -D_CORETEK_KERNEL -D_CORETEK_MIPS_N32_ABI -DMIPSEL -D_WRS_LIB_BUILD -DWRS_IPNET -D_WRS_CONFIG_SMP)

add_link_options(-EL)

CMAKE_SYSTEM_NAME:

即你目标机target所在的操作系统名称,比如ARM或者Linux你就需要写"Linux",如果Windows平台你就写"Windows",如果你的嵌入式平台没有相关OS你即需要写成"Generic",只有当CMAKE_SYSTEM_NAME这个变量被设置了,CMake才认为此时正在交叉编译,它会额外设置一个变量CMAKE_CROSSCOMPILING为TRUE.

CMAKE_C_COMPILER

顾名思义,即C语言编译器,这里可以将变量设置成完整路径或者文件名,设置成完整路径有一个好处就是CMake会去这个路径下去寻找编译相关的其他工具比如linker,binutils等,如果你写的文件名带有arm-elf等等前缀,CMake会识别到并且去寻找相关的交叉编译器。

CMAKE_CXX_COMPILER

同上,此时代表的是C++编译器。

CMAKE_FIND_ROOT_PATH

代表了一系列的相关文件夹路径的根路径的变更,比如你设置了/opt/arm/,所有的Find_xxx.cmake都会优先根据这个路径下的/usr/lib,/lib等进行查找,然后才会去你自己的/usr/lib和/lib进行查找,如果你有一些库是不被包含在/opt/arm里面的,你也可以显示指定多个值给CMAKE_FIND_ROOT_PATH

CMAKE_FIND_ROOT_PATH_MODE_PROGRAM:

对FIND_PROGRAM()起作用,有三种取值,NEVER,ONLY,BOTH,第一个表示不在你CMAKE_FIND_ROOT_PATH下进行查找,第二个表示只在这个路径下查找,第三个表示先查找这个路径,再查找全局路径,对于这个变量来说,一般都是调用宿主机的程序,所以一般都设置成NEVER.

CMAKE_FIND_ROOT_PATH_MODE_LIBRARY

对FIND_LIBRARY()起作用,表示在链接的时候的库的相关选项,因此这里需要设置成ONLY来保证我们的库是在交叉环境中找的.

CMAKE_FIND_ROOT_PATH_MODE_INCLUDE:

对FIND_PATH()和FIND_FILE()起作用,一般来说也是ONLY,如果你想改变,一般也是在相关的FIND命令中增加option来改变局部设置,有NO_CMAKE_FIND_ROOT_PATH,ONLY_CMAKE_FIND_ROOT_PATH,BOTH_CMAKE_FIND_ROOT_PATH

add_compile_options

添加编译时的参数

add_definitions

添加编译时的宏

add_link_options

添加链接参数

出差必备

买火车票、高铁票、机票,订酒店都打9折的出行工具TRIP,点击注册

mysql交叉编译 cmake_cmake交叉编译参数toolchain相关推荐

  1. mysql交叉编译 cmake_CMake交叉编译配置

    很多时候,我们在开发的时候是面对嵌入式平台,因此由于资源的限制需要用到相关的交叉编译.即在你host宿主机上要生成target目标机的程序.里面牵扯到相关头文件的切换和编译器的选择以及环境变量的改变等 ...

  2. 在MySQL中实现交叉表查询2(动态交叉表)

    在MySQL中实现交叉表查询2(动态交叉表) 交叉表分为静态交叉表和动态交叉表.其中静态交叉表中的列是固定的,因此相对容易实现:而动态交叉表中的列需要动态生成. 一.静态交叉表的实现 参见上一篇文章: ...

  3. 在MySQL中实现交叉表查询1(静态交叉表)

    在MySQL中实现交叉表查询1(静态交叉表) 一.什么是交叉表 交叉表查询是将来源于某个表中的字段进行分组,一组列在交叉表左侧,一组列在交叉表上部,并在交叉表行与列交叉处显示表中某个字段的各种计算值. ...

  4. 交叉编译和交叉工具链

    交叉编译和交叉工具链 本地编译: 在你需要运行程序的那台机器上编译 交叉编译: 在其他机器上编译,然后在本地或者另外的机器上运行 交叉编译主要是为了, 1.将所有编译都一起集合统一起来:例如,设置一个 ...

  5. 交叉编译(交叉工具链)

    一.交叉编译(交叉工具链) 在一个环境下编译生成一个可以在另一个环境中执行的可执行文件的工具 本地编译命令 gcc 实现把高级语言的C文件,翻译成二进制文件 是可以在虚拟机中找到的: which gc ...

  6. linux下查看nginx,apache,mysql,php的编译参数

    有时候nginx,apache,mysql,php编译完了想看看编译参数可以用以下方法 nginx编译参数: #/usr/local/nginx/sbin/nginx -V nginx version ...

  7. [转] linux下查看nginx,apache,mysql,php的编译参数

    转载自: http://blog.c1gstudio.com/archives/631 转自linuxtone.org 哈密瓜 http://bbs.linuxtone.org/thread-2776 ...

  8. mysql编译参数查看_查看 apache,nginx,mysql 安装时的编译参数

    快速查看服务器软件的编译参数:1.nginx编译参数: nginx -V 2.apache编译参数: cat apache的安装目录/build/config.nice 3.php编译参数: php ...

  9. 如何添加交叉编译工具链(toolchain)到环境变量?(--sysroot路径)(新:ubuntu交叉编译工具链环境变量的配置)

    文章目录 查看当前环境变量 `echo $PATH` 添加环境变量 --sysroot 新:ubuntu交叉编译工具链环境变量的配置(20220105) 查看当前环境变量 echo $PATH [ro ...

  10. 交叉编译和交叉调试环境的搭建及使用

    1. 交叉编译器 1.1 交叉编译器介绍 在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译.这个编译过程就叫交叉编译.简单地说,就是在一个平台上生成 ...

最新文章

  1. 马云马化腾李彦宏在IT峰会上的话-内容提炼
  2. 熵权法excel计算过程_翅片式蒸发器如何最简单的进行计算和仿真?
  3. 关于libtorrent库的安装
  4. 人工智障学习笔记——梯度下降(2)优化算法
  5. 综述 | 深度学习弱目标检测定位
  6. linux命令stat,查看文件详细信息
  7. Direct3D Frustum裁剪原理
  8. edius多机位多轨编辑
  9. .Net NPOI Word模板关键内容替换
  10. signature=cc1c224e1386c7abfb9e93371b44eda6,Ultrafast hot-carrier-dominated photocurrent in graphene
  11. 家庭服务器搭建,NAS存储
  12. 亚马逊为什么能吞噬世界?贝索斯有这么一种独特的战略思维
  13. ARM 是什么,ARM的意思,ARM介绍
  14. 深圳市福田高中2021年高考成绩查询,2020年深圳高中梯队排行一览!2021年十大或有新格局?...
  15. 玩转「Wi-Fi」系列之wpa_supplicant 介绍(七)
  16. git重新设置用户名密码
  17. P1655 小朋友的球
  18. 安装SQL Server 2008 及 VS 2008
  19. 【Metasploit】MSF常用命令
  20. JavaWeb期末大作业 Javaweb项目 Javaweb Servlet html

热门文章

  1. 关于我在《大话5G》这本书里学到了什么——5G和物联网不得不说的关系
  2. 手机app测试点有哪些?手机app测试用例怎么写?错过绝对后悔!
  3. php怎么将网页变成图片格式,如何把网页转换成图片 在线网页转换成pdf文档格式 网页转换工具...
  4. MySQL闪退解决办法
  5. max3490esa_max3490中文资料
  6. 你真的了解“无纸化办公”了吗?
  7. 求100以内奇数的和
  8. 施耐德控制器维修伺服驱动器维修C400A8
  9. opencv 模板匹配形状匹配
  10. JavaScript判断当前浏览器类型(包括判断移动端浏览器类型)