cmake自动选择编译器脚本

2023-11-05

一、什么是cmake

CMake 是一个跨平台的,开源的构建系统(BuildSystem)。CMake 可以通过 CMakeLists.txt 文件来产生特定平台的标准的构建文件,例如:为 Unix 平台生成makefiles文件(使用GCC编译),为 Windows MSVC 生成 projects/workspaces(使用VS IDE编译)或Makefile文件(使用nmake编译)。
关键一点是跨平台,并且在Linux平台最终生成makefile来进行编译。

二、常用知识点

1、静态库链接
target_link_libraries(dlib_demo libdlib.a)

2、动态库链接
target_link_libraries(dlib_demo dlib)

3、开启动态库编译
cmake … -DBUILD_SHARED_LIBS=ON

cmake … :注意命令后面的点号,代表本目录的上一级目录。
执行【cmake …】之后,系统自动生成了:CMakeFiles, CMakeCache.txt, cmake_install.cmake 等文件,并且生成了Makefile。不用太关注这些文件的意义,重点是它自动生成了Makefile。

4、cmake设置变量
set(SRC_CPP dlib_face_recognition.cpp)

追加变量值
set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -g -std=c++11 -W”)

5、cmake打印变量值
message(“src cpp = ${SRC_CPP}”)

三、实现cmake选择编译

执行命令cmake … -DHISI=1或者-DHISI=ON进行海思编译器编译demo。
demo如下:

cmake_minimum_required(VERSION 2.8.12)
project(eignface_demo)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lstdc++ -lm")
set(OPENCV_LIB opencv_highgui opencv_objdetect opencv_core opencv_imgproc opencv_contrib)
set(SRC_CPP EigenFace.cpp)

if (HISI)
	set(TOOLCHAIN_DIR "/opt/hisi-linux-nptl/arm-hisiv100-linux/target")
	set(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN_DIR})
	set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
	set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
	set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
	set(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/bin/arm-hisiv100nptl-linux-g++)
    set(CMAKE_C_COMPILER ${TOOLCHAIN_DIR}/bin/arm-hisiv100nptl-linux-gcc)
    include_directories(./hisi_opencv/include/)
    link_directories(./hisi_opencv/lib/)
    message("-- Use hisi compile demo")
    add_executable(eignface_hisi  ${SRC_CPP})
    target_link_libraries(eignface_hisi ${OPENCV_LIB})
else()
    set(CMAKE_C_COMPILER "/usr/bin/gcc")
    include_directories(./gcc_opencv/include/)
    link_directories(./gcc_opencv/lib/)
    message("-- Use gcc compile demo")
    add_executable(eignface_gcc  ${SRC_CPP})
    target_link_libraries(eignface_gcc ${OPENCV_LIB})
endif()


参考资料:

CMake—基础练习1 - WP的烂笔头 - 博客园 https://www.cnblogs.com/carle-09/p/11684575.html

Cmake链接静态库(一) - ox0080的博客 https://blog.csdn.net/ox0080/article/details/96453985

Cmake 设置交叉编译环境_Linux编程_Linux公社-Linux系统门户网站 https://www.linuxidc.com/Linux/2014-03/98622.htm

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cmake自动选择编译器脚本 的相关文章

  • 套接字发送调用被阻塞很长时间

    我每 10 秒在套接字上发送 2 个字节的应用程序数据 阻塞 但发送调用在下面的最后一个实例中被阻塞超过 40 秒 2012 06 13 12 02 46 653417 信息 发送前 2012 06 13 12 02 46 653457 信
  • 用于获取特定用户 ID 和进程数的 Bash 脚本

    我需要 bash 脚本来计算特定用户或所有用户的进程 我们可以输入 0 1 或更多参数 例如 myScript sh root deamon 应该像这样执行 root 92 deamon 8 2 users has total proces
  • 如何回忆上一个 bash 命令的参数?

    Bash 有没有办法回忆上一个命令的参数 我通常这样做vi file c其次是gcc file c Bash 有没有办法回忆上一个命令的参数 您可以使用 or 调用上一个命令的最后一个参数 Also Alt can be used to r
  • 使用 CMake 时如何导出 Emscripten 中的 C 函数

    In 本教程 https emscripten org docs porting connecting cpp and javascript Interacting with code html interacting with code
  • Java时区混乱

    我正在运行 Tomcat 应用程序 并且需要显示一些时间值 不幸的是 时间快到了 还有一个小时的休息时间 我调查了一下 发现我的默认时区被设置为 sun util calendar ZoneInfo id GMT 08 00 offset
  • 打印本周星期一的日期(在 bash 中)

    我想获取本周星期一的 YYYYMMdd 格式的日期 例如 今天是 20110627 从明天到周日 我仍然想打印周一 今天 的日期 然后下周重复这个过程 monday date dmonday Y m d last monday date d
  • Linux下单个目录下文件过多会怎样?

    如果一个目录中有大约 1 000 000 个单独的文件 大部分大小为 100k 其中没有其他目录和文件 是否会以任何其他可能的方式降低效率或产生缺点 ARG MAX 会对此提出异议 例如 rm rf 在目录中时 会说 参数太多 想要执行某种
  • Linux >2.6.33:可以使用 sendfile() 来实现更快的“猫”吗?

    必须将大量大文件连接成一个更大的单个文件 我们目前使用 cat file1 file2 output file but are wondering whether it could be done faster than with that
  • Cmake 错误:无效的转义序列 \U

    使用 CMake 在 VC 10 中运行 OpenCL 代码时 出现以下错误 CMake Error at CMakeLists txt 6 set Syntax error in cmake code at C Users Shreedh
  • 安装 JDK 时出错:keytool 命令需要已安装的 proc fs (/proc)。 Linux 的 Windows 子系统

    我尝试在 Linux 的 Windows 子系统 Ubuntu 14 04 上安装 Oracle JDK 1 7 但出现以下错误 the keytool command requires a mounted proc fs proc Jav
  • BeagleBone Black 如何用作大容量存储设备?

    是否可以使用 BB 作为大容量存储设备 我希望将其连接到可以从 USB 连接 例如 USB 闪存驱动器 读取文件的音频播放器并充当包含一个特定文件夹的数据存储设备 及其子文件夹 从文件系统 如果可能 在连接到开发板的闪存驱动器上 正如设备规
  • 我可以在 Ubuntu 上使用 Homebrew 吗?

    我只是尝试使用 Homebrew 和 Linuxbrew 在我的 Ubuntu 服务器上安装软件包 但都失败了 这就是我尝试安装它们的方法 sudo apt get install build essential curl git m4 r
  • 用于 e NetworkManager VPN 连接的 dbus 信号处理程序

    我需要开发一些在建立 VPN 连接时执行的 python 代码 VPN 由 NetworkManager 控制 我试图弄清楚如何为此使用 NM DBUS 事件 使用 dbus monitor system 我能够识别连接信号 signal
  • 在 MacOS 上构建需要 net461 的 dotnet SDK 项目的最简单方法

    我有一个 dotnet SDK sln and a build proj with
  • 如何使用 PyAudio 选择特定的输入设备

    通过 PyAudio 录制音频时 如何指定要使用的确切输入设备 我的电脑有两个麦克风 一个内置 一个通过 USB 我想使用 USB 麦克风进行录音 这流类 https people csail mit edu hubert pyaudio
  • Linux 上的“软/硬 nofile”是什么意思

    当我尝试在RedHat EL5上安装软件时 我得到了错误 软 硬nofile的期望值是4096 而默认值是1024 我设法增加了这个数字 但我不知道参数是什么 他们指的是软链接和硬链接吗 我改变的方法是 a 修改 etc security
  • PHP mail() 函数不发送邮件

    我有一个小问题 我正在使用一个工作脚本 在我的测试帐户 共享服务器上工作 使用 mail 函数通过 PHP 发送邮件 我刚刚得到了一个专用服务器 但我还无法让该功能发挥作用 在过去的 10 个小时左右的时间里 我阅读了有关 BIND 用于
  • 检查 cmake 中顺序不正确的可选目标

    我目前正在开发一个使用 cmake 作为构建系统的大型软件项目 但我有一个问题要检查另一个目标是否存在 或将存在 例如 有根 CMakeLists txt 和两个模块 可以选择将其作为子文件夹添加到软件项目中 A CMakeLists tx
  • 设置 Vim 背景颜色

    当我尝试更改背景颜色时 vimrc或者直接在 Vim 中使用以下命令 set background dark 这根本不影响我的背景 也没有light选项 不过 当我运行 gvim 时 看起来还不错 有没有办法在不更改 Konsole 设置的
  • 在Linux中创建可执行文件

    我计划做的一件事是编写 非常简单的 Perl 脚本 并且我希望能够在不从终端显式调用 Perl 的情况下运行它们 我明白 要做到这一点 我需要授予他们执行权限 使用 chmod 执行此操作非常简单 但它似乎也是一个稍微费力的额外步骤 我想要

随机推荐

  • 数据分布图-python 高斯分布三维等高线图像

    创作不易 转载请注明出处 论文的画图的时候 发现别人的图很好看 大概长这样 折腾了半天发现可以用高斯分布模拟 可以设置rv1 rv2 rv3来控制生成的峰的个数 然后根据调整rv的mu和var来控制生成图像的形状 rvs rv rv1 rv
  • C语言基础;求和及平均值

    3 输入三个实数 求出这三个数的和以及平均值 include
  • unity-内存GC

    Unity内存 原生内存 Native Memory 和托管内存 Managed Memory 其中Native Memory大家接触的会比较少 而且可操控性也比较少 例如AssetBundle Texture Audio这些所占的内存 这
  • Qt解决中文显示乱码问题

    我相信所有用过Qt都遇到过中文乱码问题 下面列出了我经常用的几种解决方法 方法一 include QtUtf8 h include
  • 【最新】M1 Mac如何安装Python(miniforge)并搭建环境

    B站主页 https space bilibili com 1707990930 欢迎 点赞 收藏 评论 如有错误请指正 Python Java领域博主 你们的支持是我最大的动力 嗨 我是爱丽 在这篇文章中 我将告诉你如何在你的M1 Mac
  • 支持向量机和感知机的区别

    支持向量机和感知机的区别 支持向量机和感知机都是通过一个超平面来划分样本实例类别 但是不同的是支持向量机在特征向量中能够找出非线性的超平面 支持向量机找出来的超平面是最优的 且只有一个 而感知机通过误分类点定义出的代价函数找到的超平面 是不
  • 初探STM32F4(3)--WIFI模块(1)

    WIFI WIFI测试的代码架构剖析 步骤1 wifi模块的主函数流程 步骤2 剖析atk 8266 send cmd 函数 步骤3 剖析atk 8266 wifista test 函数 步骤4 剖析如何配置成TCP客户端 步骤5 作为客户
  • js常见的属性和方法总结

    js常见的属性和方法 1 JS全局属性和方法 1 1全局属性 1 2全局方法 2 布尔对象 3 Number对象 3 1Number的属性 3 2Number的方法 4 字符串对象 4 1字符串的属性 4 2字符串的方法 5 数组对象 5
  • Python 在 conda 中安装了包,但是 pycharm 中无法引用的问题解决

    一 进入 PyCharm 的设置 二 找到 Interpreter 选项 三 进入 Show All 四 点击 五 选择 Conda 里面所对应的环境即可
  • 利用gganimate可视化R-Ladies发展情况

    作者简介Introduction taoyan R语言中文社区特约作家 伪码农 R语言爱好者 爱开源 个人博客 https ytlogos github io 公众号 生信大讲堂 往期回顾 ggplot2学习笔记系列之主题 theme 设置
  • Vue 解决跨域问题

    Vue 解决跨域问题 通常在不同服务器访问过程中可能会遇到跨域问题 也就是口头上常说的策略同源问题 CORS 出现跨越一般就是判断三个地方 http协议 请求地址 端口号 三者若有一处不相同 那么就会出现跨域 解决这个问题就要配置一个代理服
  • 实现不同局域网文件共享的解决方案:使用Python自带HTTP服务和端口映射

    文章目录 1 前言 2 本地文件服务器搭建 2 1 python的安装和设置 2 2 cpolar的安装和注册 3 本地文件服务器的发布 3 1 Cpolar云端设置 3 2 Cpolar本地设置 4 公网访问测试 5 结语 1 前言 数据
  • LLM系列

    简介 月黑见渔灯 孤光一点萤 微微风簇浪 散作满河星 小伙伴们好 我是微信公众号 小窗幽记机器学习 的小编 卖钢丝球的小男孩 今天这篇小作文主要介绍Vicuna模型 基于官方模型13B模型部署服务及对话实测 更多 更新文章欢迎关注微信公众号
  • 【R语言】——UpSetR包绘制集合图(保姆级教程)

    本期介绍利用UpsetR包大于5个样本的 维恩图 即集合图 上期 R语言 VennDiagram包绘制维恩图 Venn diagram 保姆级教程 介绍2 5个样本绘制维恩图的方法 但当样本超过5个时 常规维恩图可视化结果的直观性及数据的捕
  • JAVA_求数组的和

    public class ChangeArgs public static void main String args 求数组的和 int arr 1 3 4 6 7 8 9 10 Counto001 y new Counto001 int
  • centos7 离线安装gcc g++(已帮你备好所有rpm文件)

    rpm文件下载链接 链接 https pan baidu com s 1ehb7GiQdGwDHcMNRgBbaRw 提取码 pys4 下载完成后 将所有rpm文件放入机器中的任意目录下 进入目录 执行 rpm Uvh rpm nodeps
  • 【硬件架构的艺术】学习笔记(2)同步和复位

    目录 写在前面 2 同步和复位 2 1 同步设计 2 1 1 避免使用行波计数器 2 1 2 门控时钟 2 1 3 双边沿或混合边沿时钟 2 1 4 用触发器驱动另一个触发器的异步复位端 2 2 推荐的设计技术 2 2 1 避免在设计中出现
  • lstm原文_上海交通大学张宇帆,艾芊等:如何理解深度LSTM网络并实现超短期负荷准确预测?...

    戳题目 看全文 基于深度长短时记忆网络的区域级超短期负荷预测方法 张宇帆 艾芊 林琳 袁帅 李昭昱 电网技术 2019年第6期 1884 1891 微文内容 一 研究背景 超短期负荷预测一般指当前时刻往后一个小时内的负荷预测 主要用于日内及
  • Tip: built files are meant to be served over an HTTP server. Opening index.html over file:// won't

    vue cli项目打包报错 Tip built files are meant to be served over an HTTP server Opening index html over file won t work 报错原因 因为
  • cmake自动选择编译器脚本

    一 什么是cmake CMake 是一个跨平台的 开源的构建系统 BuildSystem CMake 可以通过 CMakeLists txt 文件来产生特定平台的标准的构建文件 例如 为 Unix 平台生成makefiles文件 使用GCC