cmake(六)Cmake添加工程子目录

2023-05-16

重点: 'cmake3' 和 'make' 命令'输出'的'深刻解读'

备注: 当前阶段暂时不使用'IDE'工具,先'熟悉各指令'

一  ADD_SUBDIRECTORY语法

应用场景:  一般情况下,我们的项目'各个子项目'都在一个'总的项目根'目录下,但有的时候,我们需要使'用外部的文件夹'

cmake项目模块布局

 

二  实践1

①  初始化

'外部文件夹'引入理解: 不在'CMakeLists'目录下 -->(与其'平级'或者还在'其外'),这里'不是'指的项目'根目录外'的文件夹,更多的是项目根目录下'子项目间'

++++++++++++++'初始化的流程'++++++++++++++

1)创建'SubDirectory项目'的文件夹,并'cd'进入

2)创建'SubDirectory项目'的源文件目录-->'src'

3)创建'SubDirectory项目'的'CMakeLists.txt'文件

②  编写SubDirectory项目CMakeLists.txt文件

场景1:  要添加的'src文件夹'是当前项目'SubDirectory'的子目录-->add_library只'指定一个指令'即可

细节: src既是'要添加的子目录'、也是'(子目录)编译输出保存'的路径-->用'用子目录名'主要是'标识'是哪个'子目录'cmake3的'产物'

③  继续

进入'src'源文件子目录,创建'示范性的源文件'-->main.cpp

备注: std:endl '应为' std::endl

④ 编写src目录CMakeLists.txt文件

备注: 子目录'src'并没有指定'project'

⑤  采用外部构建

⑥  构建测试

细节: 父项目'SubDIrectory'根据自身的CMakesFiles.txt文件中的'add_subdirectory'指令,也会对子项目'src'进行'cmake3'

验证: cmkae3 .. 之后,子目录也声称了'Makefile'目录

++++++++++++++++++'add_subdirectory效果'++++++++++++++++++

1)首先会'自动'调用该'子目录(src)'下的CMakeLists.txt文件

2)还会在'build目录(out of build:外部构建)'生成对应的'目标(target)'文件

备注1: 体现在CMAKE_CURRENT_BINARY_DIR的变量,通过'打印'该变量查看

备注2: add_subdirectory(src target) -->默认是'src',在build目录会变成'target'

补充1: 任意一个'目录源文件(Source Tree)'对应一个'构建目录(Build Tree)'的target

补充2: include(src/CMakeLIsts.txt)'破坏'了'target目录结构构造'的功能

补充3: 通过add_subdirectory()'自顶向下'一层一层的'查找'CMakeLists.txt文件

参考博客

三  实践2

①  清理上次实验的环境

②  演示bin_dir

测试

四   注意事项

①  超出平级目录

只要'不是上下级关系'(比如:hello/ 和 world/ 目录在其他目录下或者是 test/ 目录的上级),在使用 add_subdirectory() 时都'需要指定 [binary_dir] 参数'

②  报错信息

注意: 如果 src_dir '不是'当前目录(CMakeLists.txt 所在目录)的'子目录',那么就需要'显式指定 '[binary_dir] 参数,用于'存储 src_dir 相关'文件

解读: 如果指定'src_dir(子目录)',但是'src_dir'不是当前项目的'子目录',则'cmake3 输出'默认会保存在'src_dir'目录,而'当前项目'无法使用,需要'保存到当前项目路径',所以要指定'bin_directory'

参考博客1

参考博客2

cmake生成完毕后自动执行其他命令

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

cmake(六)Cmake添加工程子目录 的相关文章

随机推荐

  • 代码优化-减少if else

    写在前面 不知大家有没遇到过像 横放着的金字塔 一样的 if else 嵌套 xff1a 我并没夸大其词 xff0c 我是真的遇到过了 xff01 嵌套 6 7 层 xff0c 一个函数几百行 xff0c 简 xff01 直 xff01 看
  • iapp裕v3语言浏览器教程

    如果你要写简单的浏览器的话 你可以这么做qwq 创建好应用后先添加浏览器 他的属性为 width span class token operator 61 span span class token operator span span c
  • VMOS-Pro一款虚拟机app。

    vmos分为两个版本 xff1a 安卓vmos 安卓vmospro 两个的差距在于界面 xff0c 可以说vmospro是重磅更新了 xff0c 让我们了解这一款虚拟机吧 xff01 首先这两款虚拟机都是安卓系统 xff0c 你要ios上红
  • UTM虚拟机-首款iOS虚拟机

    utm虚拟机 xff1b 非越狱安装方法 utm虚拟机是一款ipa为后缀的文件 xff0c 需要爱思助手安装 越狱安装方法 使用uncover越狱后在安装ipa文件 utm介绍 他跟bochs limbo qemo apq等app一样 xf
  • 所有小米机型 解BT+刷Magisk并ROOT+躲避应用ROOT环境检查教程

    废话章节 xff0c 可以不看 时隔一年又回来了 上一篇文章还是在2021年更新的 xff0c 因为学业问题我这是1年1更显然不行 xff0c 那我这次为啥不更新iApp了 xff1f 因为忘得差不多了 我也没想到我有一天回过头来看自己的文
  • 【Minecraft】【ModPC】【我的世界】 我的世界电脑版如何进入网络游戏?

    我的世界电脑版如何进入网络游戏 xff1f 须知 看看就好 xff0c 不要频繁使用modpc xff0c 破坏游戏玩家体验 xff01 不知道为什么Win11会用着用着就会闪退 降级到Win10就什么事也没有 下载 ModPC下载 包含普
  • WindwosServer系统一些设置【网卡驱动修复】【安装UWP应用】【服务器管理取消开机自启动】

    WindwosServer系统一些设置 这里以2022为例 xff1a 第一 网卡驱动丢失修复 此教程只针对I219 V LM网卡 xff01 小知识 xff1a 当电脑没网时 xff0c 将手机和电脑用USB数据线连接 打开设置 xff1
  • dp最长不上升子序列 二分upper lower+贪心

    题意 找出最长不上升子序列长度 再找出最长不下降子序列最大长度 写法运用了指针 减少了代码量 include lt iostream gt include lt algorithm gt using namespace std const
  • 小米平板5ProWIFI(elish)刷ArrowOS

    文章目录 警告下载奇兔刷机系统本体及Recovery 清除数据刷入AospRec开始刷入警告 完成设置输入法 变砖头了qwq又是警告 芝士截图Root方法结尾 警告 此文章只针对 小米平板5Pro Wifi版本 xff08 elish xf
  • 【宝塔】【Windows】【Blessing-Skin】【我的世界】用宝塔Windows搭建皮肤站

    文章目录 前言所需环境相关链接安装宝塔安装步骤访问宝塔同意协议 安装环境安装WNMP添加站点 开始安装皮肤站配置网站配置Nginx URL重写规则 xff08 即 伪静态 xff09 配置PHP 安装皮肤站 一些小调整安装插件常见问题 插件
  • ping的详细过程学习笔记

    pc1 ping pc2 也就是pc1 xff1a 192 168 1 1 ping pc2 xff1a 192 168 1 2 属于同一网段的ping过程 步骤1 ping开始 即后台运行192 168 1 1 ping 192 168
  • FTPClient上传文件内容为空/损坏/缺失

    项目场景 xff1a 项目场景 xff1a 本地项目联调OA系统的时候 xff0c 在发送审批时会传送相关附件 xff0c 该附件由本地项目上传至FTP xff0c OA系统会根据我们提供的路径和文件名去FTP中找到该文件 问题描述 xff
  • Debian9桌面设置

    本文由荒原之梦原创 xff0c 原文链接 xff1a http zhaokaifeng com p 61 665 新安装的Debian9桌面上啥都没有 xff0c 就像这样 xff1a 图 1 虽然很简洁 xff0c 但是用着不是很方便 x
  • 爬虫遇到Cloudflare问题

    网址 xff1a https opensea io rankings sortBy 61 seven day volume 返回代码 xff1a 403 遇到的问题 xff1a Access denied api opensea io us
  • java servlet写的网页猜数小游戏

    几年前 xff0c 用java servlet 写了个猜数的网页小游戏 xff1b 今天看了觉得有点意思 xff0c 贴出来怀旧一下 xff1a 1 代码如下 xff1a package cn wzb import java io impo
  • 安卓-system.img镜像文件过大问题

    3126 5 1SDK预置过多apk时导致编译otapackage时报错处理 xff1a 1 修改prebuilts python linux x86 2 7 5 lib python2 7 zipfile py文件中为ZIP64 LIMI
  • 使用Tesseract-OCR识别图片中的文字并生成双层PDF

    识别图片中的文字并不是很困难 如果自己训练一个文字识别的深度学习程序去识别也是可以 xff0c 但是太费劲 Tesseract OCR是一个开源的文字识别引擎 xff0c 并且支持包括中文在内的多国语言 只要将语言配置上去 xff0c 就可
  • iptables(三)iptables命令详解

    一 语法规则 iptables t table COMMAND chain CONDITION j ACTION t table 是指 39 操作的表 39 filter nat mangle或raw 39 默认使用filter 39 CO
  • 单调栈lllll

    单调栈 xff0c 就是一个栈 xff0c 不过栈内元素保证单调性 即 xff0c 栈内元素要么从小到大 xff0c 要么从大到小 而单调栈维护的就是一个数前 后第一个大于 小于他的数 例题 xff1a P5788 模板 单调栈 例题就是一
  • cmake(六)Cmake添加工程子目录

    重点 xff1a 39 cmake3 39 和 39 make 39 命令 39 输出 39 的 39 深刻解读 39 备注 xff1a 当前阶段暂时不使用 39 IDE 39 工具 先 39 熟悉各指令 39 一 ADD SUBDIREC