CMake交叉编译工具编写

news/2024/12/5 5:02:34/

CMake交叉编译工具编写

CMake交叉编译工具编写

  • CMake交叉编译工具编写
  • 前言
  • 一、编写toolchain.cmake
  • 二、编写CMakeLists.txt
  • 三、编写build.sh


前言

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

一、编写toolchain.cmake

#该指令必须存在
#其目的是设置目标机使用的操作系统名称,支持Linux,QNX,WindowsCE,Android等。
#如果没有操作系统,那么就写 Generic。执行该指令后,cmake 变量——CMAKE_CROSSCOMPILING 会自动被设置为 TRUE
#此时 cmake 就会“知道“现在执行的是交叉编译;
SET(CMAKE_SYSTEM_NAME Linux) #设置系统类型#由于 cmake 无法自动获取目标机器信息,因此需要显式指明编译工具
set(CMAKE_C_COMPILER /opt/zlg/m1126-sdk-v1.8.0-ga_2021.08.16/host/bin/arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER /opt/zlg/m1126-sdk-v1.8.0-ga_2021.08.16/host/bin/arm-linux-gnueabihf-g++)#嵌入式系统环境镜像根目录,将其加到其他搜索目录之前
SET(CMAKE_FIND_ROOT_PATH  /opt/zlg/m1126-sdk-v1.8.0-ga_2021.08.16/host/arm-buildroot-linux-gnueabihf/sysroot)SET(CMAKE_C_FLAGS_INIT "-O3 --sysroot=${CMAKE_FIND_ROOT_PATH}")
SET(CMAKE_CXX_FLAGS_INIT "-O3 --sysroot=${CMAKE_FIND_ROOT_PATH}")#从来不在指定目录下查找工具程序
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
#只在指定目录下查找库文件
#SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH)
#只在指定目录下查找头文件
#SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH)
#只在指定目录下查找包
#SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
#SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH)

二、编写CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(get_image_send_recognise)set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")set(MQTT_INC ${CMAKE_CURRENT_SOURCE_DIR}/include)
set(JSON_INC ${CMAKE_CURRENT_SOURCE_DIR}/nlohmann)
message(${MQTT_INC})
message(${JSON_INC})FILE(GLOB MQTT_LIB ${CMAKE_CURRENT_SOURCE_DIR}/lib/*.so*)#find_package(OpenCV REQUIRED)
set(OPNECV_INCLUDE ${CMAKE_FIND_ROOT_PATH}/usr/include/opencv ${CMAKE_FIND_ROOT_PATH}/usr/include/opencv2)include_directories(${OPNECV_INCLUDE} ${MQTT_INC} ${JSON_INC})
add_executable(get_image_send_recognise main.cpp base64.cpp)
target_link_libraries(get_image_send_recognise  #${OpenCV_LIBS} ${MQTT_LIB}-lavutil -lavformat -lavcodec -lswscale -lz -lm-lopencv_calib3d -lopencv_core # -lopencv_dnn -lopencv_features2d -lopencv_flann -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc -lopencv_ml -lopencv_objdetect -lopencv_photo -lopencv_shape -lopencv_stitching -lopencv_superres -lopencv_videoio -lopencv_video -lopencv_videostab)

三、编写build.sh

#########################################################################
# File Name: build.sh
# Author: Shey Chen
#########################################################################
#!/bin/bash
basepath=$(cd `dirname $0`; pwd) # current path
dir="./build"[-d "$dir"] && -rf "$dir"
mkdir "$dir"
cd "$dir"cmake -DCMAKE_TOOLCHAIN_FILE=../toolchain.cmake  ..
#cmake -DCMAKE_TOOLCHAIN_FILE=../CMake/toolchain.cmake.RV1126  ..
echo "RV1126"
makecd .. 

http://www.ppmy.cn/news/3032.html

相关文章

matlab智能算法之遗传算法

智能算法之遗传算法智能算法之遗传算法1.背景2.算法3.案例3.1 案例求解二元函数的最大值智能算法之遗传算法 1.背景 2.算法 3.案例 3.1 案例求解二元函数的最大值 例1:计算二元函数f(x,y)20x2y2−10∗(cos(2πx)cos(2πy))f(x,y)20x^2y^2-10*(cos(2\pi x)cos(2…

手写js——继承

原型链继承 所谓 函数 也就是 函数 Father其本身,也叫作构造函数 ,当一个函数被创建的同时,也会为其创建一个 prototype 属性,而这个属性,就是用来指向 函数原型,的我们可以把 prototype 理解为 Father的一…

教育的本质——采用不同学习方式,学习者在两周后还能记住的内容有多少

目录 一、学习金字塔模型 二、学习曲线 三、左右脑交替学习法 一、学习金字塔模型 “学习金字塔模型”,人们学习的效率一共分为七个层次: 第一层 ~ 第四层:这是我们最熟悉不过的形式,在学生时代,老师在上面讲课、…

冯诺依曼体系和操作系统概念

Ⅰ. 冯诺依曼体系结构 我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。 截至目前,我们所认识的计算机,都是有一个个的硬件组件组成 输入单元:包括键盘, 鼠标&#xf…

redis 主从复制(读写分离)集群搭建(含错误处理)

目录 1.概述 2.搭建 2.1.安装配置 2.2.认主 2.3.错误处理 3.原理 1.概述 当面临大流量时,redis可以采取集群的方式进行扩容,将压力分散到集群中的多个结点上去防止redis被打挂。redis的扩容方式有两种: 垂直扩容,即读写分离…

MATLAB | 一起来感受数学之美,第一届迷你黑客大赛回顾

Hey真的是好久不见,最近确实是比较忙更新频率也下来了,过段时间应该能恢复正常更新速度,之前给大家解说过今年举办的math is beautiful迷你黑客大赛,但这其实是第二届大赛,本期推送带大家回顾一下第一期大赛&#xff0…

大一作业HTML个人网页作业(宠物狗)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

第四部分 书写命令

目录一、显示命令二、命令执行三、命令出错四、嵌套执行 make五、定义命令包每条规则中的命令和操作系统 shell 的命令行是一致的。make 会按顺序一条一条地执行命令,每条命令的开头必须以[Tab] 键开头,除非,命令是紧跟在依赖规则后面的分号后…