CMAKE命令使用时需要与CMakeLists.txt在不同的目录下,一般是在CMakeList.txt文档所在的目录下创建一个build文件夹,然后cd到build文件夹,执行cmake ..,此时会根据CMakeLists.txt将需要的配置文件生成到build目录下,然后在build目录下执行make

在嵌入式设备应用时,需要在X86架构下编译板卡需要的ARM架构的文件,需要配置交叉编译器等来完成。这时就需要编写.cmake文件来实现配置,在运行cmake命令时添加-DCMAKE_TOOLCHAIN_FILE=*.cmake,在build目录下执行cmake -DDCMAKE_TOOLCHAIN_FILE=*.cmake ..

*.cmake文件的编写方法及理解如下:转自网址

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

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

3、CMAKE_CXX_COMPILER: 同上,此时代表的是C++编译器。

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

set(CMAKE_FIND_ROOT_PATH /opt/arm /opt/inst)

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

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

7、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

8、BOOST_ROOT: 对于需要boost库的用户来说,相关的boost库路径配置也需要设置,因此这里的路径即ARM下的boost路径,里面有include和lib。

9、QT_QMAKE_EXECUTABLE: 对于Qt用户来说,需要更改相关的qmake命令切换成嵌入式版本,因此这里需要指定成相应的qmake路径(指定到qmake本身)

下面贴上两份相关文件demo,让同学可以更清晰的看到相应配置。

# this is required
SET(CMAKE_SYSTEM_NAME Linux)# specify the cross compiler
SET(CMAKE_C_COMPILER   /opt/arm/usr/bin/ppc_74xx-gcc)
SET(CMAKE_CXX_COMPILER /opt/arm/usr/bin/ppc_74xx-g++)# where is the target environment
SET(CMAKE_FIND_ROOT_PATH  /opt/arm/ppc_74xx /home/rickk/arm_inst)# search for programs in the build host directories (not necessary)
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)# configure Boost and Qt
SET(QT_QMAKE_EXECUTABLE /opt/qt-embedded/qmake)
SET(BOOST_ROOT /opt/boost_arm)

cmake_minimum_required( VERSION 2.6.3 )SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_C_COMPILER "aarch64-linux-gcc")
SET(CMAKE_CXX_COMPILER "aarch64-linux-g++")
#SET(CMAKE_SYSTEM_PROCESSOR "armv7-a")
SET(CMAKE_SYSTEM_PROCESSOR "armv8-a")add_definitions(-fPIC)
add_definitions(-DARMLINUX)
add_definitions(-D__gnu_linux__)

这样就完成了相关配置文件的编写,之后就可以灵活指定采用宿主机编译还是交叉编译,仅仅-DDCMAKE_TOOLCHAIN_FILE=*.cmake的差异。

CMAKE 调用交叉编译器(CMAKE使用)相关推荐

  1. linux glog 0.50版本 设置交叉编译器生成静态库

    目标:设置glog的交叉编译器,生成静态库libglog.a: 步骤: (1)下载最新版本的glog源码,最新版本0.050(2021.08.23) https://github.com/google ...

  2. cmake linux 交叉编译,[CMake]CMake设置arm-linux-gcc交叉编译器

    标签: cmake 交叉编译器 arm-linux-gcc 分类: 开发工具/开发环境 主机:Ubuntu18.04 交叉编译器:arm-linux-gcc CMake在ubuntu系统下默认使用系统 ...

  3. 【CMAKE】指定编译器架构(x86 or x64)

    1.Windows vs2015 x64编译器为例,cmake命令如下: cmake -G "Visual Studio 14 Win64" path\to\source\dir ...

  4. CMake调用boost库

    CMake调用boost的编译脚本 cmake_minimum_required(VERSION 3.14) project(boost_python) #设置支持C++11特性 set(CMAKE_ ...

  5. Swig超详细入门教程(Java调用C/C++, CMake)——更新于2021.12

    目录 相关教程 环境配置 0基础上手例子(C/C++) 使用CMake的例子(C语言) 使用CMake的例子(C++) 本文主要是手把手教萌新们如何用官方用例构建(有许多本人亲身踩坑血泪史) 相关教程 ...

  6. 【Android NDK 开发】Android Studio 使用 CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径 | 链接动态库 )

    文章目录 I . CMake 简介 II . Android Studio 中 CMake 引入静态库流程 III . 指定 CMake 最小版本号 IV . 导入函数库 ( 静态库 / 动态库 ) ...

  7. 使用CMake构建/开始使用CMake

    Getting started with CMake 开始使用CMake CMake is a group of tools that allow to build, test, and packag ...

  8. 用CMake构建工程时 cmake -G“Unix Makefiles“ 的使用

    在Windows上使用CMake构建项目出现了很多错误,搜索了很多资料尝试改了很多地方始终没能找到与我类似的情况,一度让我以为是系统问题.今天发现就一句,是没用cmake -G"Unix M ...

  9. 交叉编译器 arm-linux-gnueabi 和 arm-linux-gnueabihf 的区别

    原文地址 :https://zhidao.baidu.com/question/1691117630864232868.html 自己之前一直没搞清楚这两个交叉编译器到底有什么问题,特意google一 ...

最新文章

  1. 大家有没有推荐不错开源的小程序商城?这几个不要错过
  2. 【pytorch】torch.mean的使用
  3. python 安装第三方库pygame
  4. python多态的例子_Python编程之多态用法实例详解
  5. java程序运行堆栈分析
  6. OpenGL indexedCube索引多维数据集的实例
  7. c#保存数据格式为.cvs_C#读取csv格式文件的方法
  8. 前端学习(2207):Vue-store文件夹的目录结构
  9. 给VBox中的linux添加虚拟硬盘(扩容)
  10. 是!“不会数据分析的,全是假程序员”!HR:太真实……
  11. matlab模糊数学隶属问题,模糊数学模型matlab
  12. C++ Merge sort(归并排序)
  13. 那些我们卖掉的二手iPhone到底去哪了?
  14. [Redis]Redis客户端
  15. 简简单单做股票读书笔记(1/8)
  16. 内网端口映射软件之80端口映射发布网站
  17. ibeacon UWB GPS 空间四点定位算法
  18. 天才少年:稚晖君放弃华为百万年薪,投身机器人!有何“玄机”?
  19. 韦东山ARM第一期总结
  20. zabbix4.0安装部署

热门文章

  1. Qt的paint函数重写,以及QPaint给一条线绘制箭头
  2. pyqt5 QPainter绘制图形,并旋转
  3. chrome 插件 导出与导入,以apizza SQ为例
  4. fanuc系统md和mf区别_发那科 FANUC-MF 系统参数设定步骤(通过 MDI 进行设定)
  5. JAVA电影院管理系统计算机毕业设计Mybatis+系统+数据库+调试部署
  6. python 除了 不会生猴子外 其他都可以
  7. 成都百词斩2018web前端秋招笔试题
  8. 字符串ASCLL排序 Java
  9. Scroller源码详解
  10. Linux 系统Apache配置SSL证书