CMake Practice 学习笔记二---子目录、安装

news2024/12/27 11:21:55

让前面的Hello World更像一个工程:

  1. 为工程添加一个子目录src,用来放置工程源代码;
  2. 添加一个子目录doc,用来反之这个工程的文档hello.txt;
  3. 在工程目录添加文本文件COPYRIGHT,README;
  4. 在工程目录添加一个runhello.sh脚本,用来调用hello二进制;
  5. 将构建后的目标文件放入构建目录的bin子目录;
  6. 最终安装这些文件:将hello二进制与runhello.sh安装至/usr/bin,将doc目录的内容以及COPYRIGHT、README安装到/usr/share/doc/cmake/t2

1、准备工作

在/backup/cmake 目录下建立t2目录:

mkdir t2
mv t1/main.c t1/CMakeLists.txt t2/
touch COPYRIGHT
touch README

添加子目录src:

cd t2 
mkdir src
mv main.c src

mkdir doc
vi doc/hello.txt # 随便写点东西进去并保存

进入子目录src,建立一个CMakeLists.txt,其内容如下:

ADD_EXECUTABLE(hello main.c)

# 换个地方保存目标二进制文件
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)

t2工程的CMakeLists.txt修改为:

PROJECT(HELLO)

# 向当前工程添加源文件的子目录 src
# 并指定中间二进制文件和目标二进制文件存放的位置 编译目录下的bin目录 ( 可以不指定,则为编译目录下的src目录)
ADD_SUBDIRECTORY(src bin)


# 安装COPYRIGHT、README文件
INSTALL(FILES COPYRIGHT README DESTINATION share/doc/cmake/t2)

# 安装 runhello.sh
INSTALL(PROGRAMS runhello.sh DESTINATION bin)

# 安装doc目录中的内容,即hello.txt
INSTALL(DIRECTORY doc/ DESTINATION share/doc/cmake/t2) # 一定是doc/

# 安装可执行二进制、动态库、静态库
#INSTALL(TARGETS myrun mylib mystaticlib
    RUNTIME DESTINATION bin
    LIBRARY DESTINATION lib
    ARCHIVE DESTINATION libstatic)
# 安装可执行二进制
INSTALL(TARGETS hello  RUNTIME DESTINATION bin)

2、构建

在t2目录下新建build目录,进入build目录进行外部编译

此时-DCMAKE_INSTALL_PREFIX指定的目录就是上面INSTALL指令中的DESTINATION

cmake -DCMAKE_INSTALL_PREFIX=/tmp/t2/usr ..
make
sudo make install

安装结果:

如果你要直接安装到系统:

cmake -DCMAKE_INSTALL_PREFIX=/usr ..

问:如果没有定义CMAKE_INSTALL_PREFIX会安装到哪里?

CMAKE_INSTALL_PREFIX的默认定义是/usr/local哦。

问:你也许会疑惑,src目录下的CMakeLists.txt好像没有用到过?

在工程目录t2下的CMakeLists.txt中的一句ADD_SUBDIRECTORY(src bin),就会进入子目录src利用该目录下CMakeLlists.txt进行构建哦。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/553411.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux常见指令(3)

Linux常见指令 ⑶ date指令引入描述用法例子时间时间戳 cal指令描述用法例子 find指令描述用法例子补充which指令whereis指令 grep指令描述用法例子grep 对文件的操作grep 对目录的操作 补充 打包压缩 和 解压解包zip && unzip描述用法例子对文件的操作对目录的操作 ta…

苹果手机没有备份怎么恢复数据?数据恢复,轻松解决!

案例:苹果手机没有进行过iTunes和iCloud备份,手机还原后数据都被抹掉了,还能恢复数据吗? 【求问各位大神,我几天前把苹果手机的数据还原了,也没有提前进行过数据的备份。现在想起来之前微信上有一些重要的…

uniapp使用uView框架,后端传16位数以上时出现精度缺失的情况

1、使用 json-bigint,失败 2、使用 config 里的 getTask,失败 3、修改 dataType,成功 原因: 通过ajax请求回来的数据在response和preview两种状态显示的是不同的。response中的看到的数据格式其实是字符串(ajax请求…

GPT-4 国内使用指南 保姆教程

gpt持续火爆,然鹅国内很多朋友还说不会使用,因此有必要科普一篇文章! app.educlub.icu很多朋友因为各种限制无法开通#ChatGPT Plus,而申请OpenAI的GPT-4 API也要慢慢排队(我的也还没下来)。于是在这里我搜…

3 个令人惊艳的 ChatGPT 项目,开源了!

过去一周,AI 界又发生了天翻地覆的变化,其中,最广为人知的,应该是 OpenAI 正式上线 ChatGPT iOS 客户端,让所有人都可以更方便的在手机上与 ChatGPT 聊天。 此外,Stable Diffusion 母公司 Stability AI 也…

智能文档处理黑科技,拥抱更高效的数字世界

目录 0 写在前面1 为何要关注智慧文档?2 图像弯曲矫正3 手写板反光擦除4 版面元素检测5 文档篡改检测总结 0 写在前面 近期,中国图象图形学学会文档图像分析与识别专业委员会与上海合合信息科技有限公司联合打造了《文档图像智能分析与处理》高峰论坛。…

OpenCloudOS开源Linux操作系统详解

OpenCloudOS是什么?OpenCloudOS是Linux哪个版本?OpenCloudOS是哪个国家的?OpenCloudOS是一个国产操作系统开源社区,OpenCloudOS的基础库和用户态组件完全与CentOS 8兼容,腾讯云百科分享OpenCloudOS Linux操作系统详细介…

基于MATLAB的无人机遥感数据预处理与农林植被性状估算实践技术

为了将人工智能方法引入农业生产领域。首先在种植、养护等生产作业环节,逐步摆脱人力依赖;在施肥灌溉环节构建智慧节能系统;在产量预测和商品定价生产管理环节提高效能。这些智慧农业迫切需要实现的目标,首先要解决的问题就是多源…

第三十六章 状态管理工具与总结

Redux 是一个渐进式的状态管理库,它不仅仅是一个库,同时也是一个框架。它提供了一组用于构建复杂应用程序的工具和库,其中包括一些浏览器插件。 在 Chrome 和 Firefox 浏览器上,已经存在一些 Redux 的浏览器插件,例如 …

「技术分享」汽车检测移动机器人应用,科聪赋能智能数字化检测!

2021年汽车无钥匙进入系统市场价值16亿美元,预计到 2027 年将达到 26.8 亿美元,在预测期内的复合年增长率超过10%。这一光明的市场前景,推动相关供应商推出复杂的集成电子系统。但过去,汽车制造环节在智能化、数字化和过程成本等方…

企业数字化转型到底该怎么做?

企业数字化转型涉及实施技术和利用数字工具来增强业务流程、改善客户体验和推动创新。主要包括: 愿景和战略:首先明确定义数字化转型目标。确定数字技术可以对企业的业务产生最重大影响的领域,例如运营效率、客户参与度或产品开发。 评估当前…

【Java EE】Spring Cloud Gateway

Spring Cloud Gateway 添加Spring Cloud Gateway术语表工作流程网关的作用路由负载均衡统一处理跨域发布控制流量染色统一接口保护统一业务处理统一鉴权访问控制统一日志统一文档 网关的分类实现网关开启日志断言过滤器 参考文档 https://springdoc.cn/spring-cloud-gateway/ …

BetaFlight Mark4之“妖怪”声音之二

BetaFlight Mark4之“妖怪”声音之二 1. 源由2. 回顾3. 分析4. 优化5. 数据6. 综述7. 参考资料8. 附录 1. 源由 在BetaFlight Mark4之“妖怪”声音大致做了如下测试: 滤波参数调整 (怀疑滤波参数问题,导致振动传入系统,进而桨叶转速变化产生异响)整机螺…

系统学习大模型的20篇论文

【引子】“脚踏实地,仰望星空”, 知其然还要知其所以然。读论文是一条重要的途径,这一篇文章https://magazine.sebastianraschka.com/p/understanding-large-language-models非常值得借鉴,不敢私藏,编译成文。 大型语言…

Vue-生命周期

Vue实例有一个完整的生命周期,也就是说从开始创建、初始化数据、编译模板、挂在DOM、渲染-更新-渲染、卸载等一系列过程,我们成为Vue 实例的生命周期,钩子就是在某个阶段给你一个做某些处理的机会。 注册周期钩子​ 举例来说,mo…

聚观早报 | ChatGPT登顶美区iOS免费榜;库克不满苹果首款MR设备

今日要闻:ChatGPT登顶美区iOS免费榜;库克不满苹果首款MR设备;索尼正开发小尺寸折叠屏手机;万达辟谣大规模裁员;智能仿生手让截肢者重获手心的温度 ChatGPT登顶美区iOS免费榜 ChatGPT 在 iOS 美区免费 App 排行榜上位列…

一种轻量级的消息传输协议-MQTT

正文 大家周末好,我是bug菌~ 最近项目中用到了MQTT,感觉挺优秀的一种协议,所以这里分享一些相关的知识。 1 什么是MQTT MQTT是一种轻量级的消息传输协议,用于物联网设备和应用程序之间的通信。其最初由IBM开发&#xf…

TCP可靠数据传输

TCP 是通过序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输的。 1 重传机制 TCP 利用重传机制解决数据包丢失的情况,常见的重传机制如下: 超时重传快速重传SACKD-SACK 1.1 超时重传 重传机制的其中一个方式,就是…

网络的七层模型

网络的七层模型 七层模型结构 OSI七层模型TCP/IP五层模型说明协议硬件解释应用层应用层网络服务与最终用户的一个接口HTTP HTTPS FTP TFTP SMTP POP3 IMAP TELNET SNMP DHCP这层不涉及硬件,主要是web应用的表形式为应用程序提供网络服务表示层数据的表示、安全、压…

[学习笔记] [机器学习] 6. [下]决策树算法(熵Entropy、信息增益(率)、基尼值(指数)、CART剪枝、特征工程特征提取、回归决策树)

7. 回归决策树 学习目标: 知道回归决策树的实现原理 前面已经讲到,关于数据类型,我们主要可以把其分为两类,①连续型数据和②离散型数据。 在面对不同数据时,决策树也可以分为两大类型: 分类决策树&…