CMake学习笔记(二)从PROJECT_BINARY_DIR看外部编译和内部编译

目录

外部编译

内部编译

总结


外部编译

看如下例子:我在EXE_OUT_PATH中建立了文件夹build、文件夹src2 和 文件CMakeLists.txt

 其中EXE_OUT_PATH/CMakeLists.txt的内容如下:

PROJECT(out_path)
ADD_SUBDIRECTORY(src2 bin2)
MESSAGE(STATUS "main CMakeLists.txt:" ${PROJECT_BINARY_DIR})

在src2文件夹内也建立一个CMakeLists.txt

src2/CMakeLists.txt内容如下: 

MESSAGE(STATUS "sub CMakeLists.txt" ${PROJECT_BINARY_DIR})

 进入build目录,执行cmake ..

我们看到,前面两个cmakeLists.txt通过MESSAGE打印的内容都是

/root/cmke/EXE_OUT_PATH/build

也就是说, 从build文件夹执行cmake,变量PROJECT_BINARY_DIR的值就等于/root/cmke/EXE_OUT_PATH/build

编译产生的中间文件也将存储在这个路径。在build执行cmake的好处是,编译过程产生的中间文件和最终结果都单独放在一个路径下,不会与其他文件混在一起。这就叫外部编译

此外,我们也看到,ADD_SUBDIRECTORY中指定的bin2目录也出现在build路径下

内部编译

我们亦可以在EXE_OUT_PATH下执行 cmake .

我们看到:

1 输出的内容变成了 /root/cmke/EXE_OUT_PATH,说明PROJECT_BINARY_DIR变成了/root/cmke/EXE_OUT_PATH,也就是我们执行cmake .的路径。

2 在ADD_SUBDIRECTORY中指定的bin2目录出现在了/root/cmke/EXE_OUT_PATH中。

此时cmake产生的中间文件、结果文件都保存在EXE_OUT_PATH路径下 ,与CMakeLists.txt混在一起,这叫做内部编译

总结

1 从哪个路径执行cmake命令,变量PROJECT_BINARY_DIR就等于这个路径

cmake产生的中间文件、结果文件都保存在与CMakeLists.txt一起的路径下,这叫做内部编译。反之,两者分开的,就是外部编译。cmake产生的中间文件、结果文件保存的路径等于变量PROJECT_BINARY_DIR。

3 ADD_SUBDIRECTORY的第二个输入参数指定了cmake产生结果文件的保存路径。假如不指定这个输入参数,则用来存放编译结果的文件夹就是${PROJECT_BINARY_DIR} ;假如ADD_SUBDIRECTORY第二个参数有内容,比如是bin,则用来存放编译结果的文件夹就是${PROJECT_BINARY_DIR}/bin

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

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

相关文章

uniapp中实现canvas超出屏幕滚动查看(全网唯一可行方案)

亲爱的小伙伴,当你需要在uniapp中使用canvas绘制一个超长图,就类似于横向的流程图时,这个canvas超出屏幕部分拖动屏幕查看会变得十分棘手。我查阅了大量资料,甚至是问了无数遍AI,得到的结果只有很敷衍的监听touch,然后…

(一)whatsapp 语音通话基本流程

经过了一整年的开发测试&#xff0c;终于将whatsapp 语音通话完成&#xff0c;期间主要参考webrtc的源码来实现.下面简要说一下大致的步骤 XMPP 协商 发起或者接受语音通话第一步是发起XMPP 协商&#xff0c;这个协商过程非常重要。下面是协商一个包 <call toxxxs.whatsap…

【大模型基础】什么是KV Cache?

哪里存在KV Cache&#xff1f; KV cache发生在多个token生成的步骤中&#xff0c;并且只发生在decoder中&#xff08;例如&#xff0c;decoder-only模型&#xff0c;如 GPT&#xff0c;或在encoder-decoder模型&#xff0c;如T5的decoder部分&#xff09;&#xff0c;BERT这样…

USB - 通过configfs配置Linux USB Gadget

Linux USB gadget configured through configfs Overview USB Linux 小工具是一种具有 UDC&#xff08;USB 设备控制器&#xff09;的设备&#xff0c;可连接到 USB 主机&#xff0c;以扩展其附加功能&#xff0c;如串行端口或大容量存储功能。 A USB Linux Gadget is a device…

数据分析面试题(21~30)

21、简单说一下说说置信区间、置信度。 ①置信区间是指由样本统计量所构成的总体参数的估计区间。通常以一个样本统计量的估计值为中心&#xff0c;加减一个标准误差的倍数&#xff0c;构成一个区间。 ②置信度是对置信区间的信心程度的度量&#xff0c;通常以百分比的形式表…

Protocol Buffers设计要点

概述 一种开源跨平台的序列化结构化数据的协议。可用于存储数据或在网络上进行数据通信。它提供了用于描述数据结构的接口描述语言&#xff08;IDL&#xff09;&#xff0c;也提供了根据 IDL 产生代码的程序工具。Protocol Buffers的设计目标是简单和性能&#xff0c;所以与 XM…

(执行上下文作用域链)前端八股文修炼Day4

一 作用域作用域链 作用域&#xff08;Scope&#xff09;是指程序中定义变量的区域&#xff0c;作用域规定了在这个区域内变量的可访问性。在 JavaScript 中&#xff0c;作用域可以分为全局作用域和局部作用域。 全局作用域&#xff1a;在代码中任何地方都可以访问的作用域&am…

基于Springboot的狱内罪犯危险性评估系统的设计与实现(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的狱内罪犯危险性评估系统的设计与实现&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#…

宝塔部署项目

如何在云服务器上使用宝塔 登录到你的云服务器后&#xff0c;执行宝塔面板安装命令&#xff0c;阿里云服务器网使用的CentOS操作系统&#xff0c;命令如下 yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh …

题。。。。

O - 胜利大逃亡(续) 题目分析 bfs状态压缩&#xff08;在bfs的基础上&#xff0c;存储持有不同钥匙时&#xff0c;此点位是否走过的情况&#xff09;&#xff1b; -----状态压缩使用二进制实现&#xff0c;同时通过位运算修改是否转移至另一状态&#xff08;详情见代码及注释…

解决 Xshell 等工具连接虚拟机失败

这里以 Xshell 等工具连接 Linux 虚拟机为例 对于我们使用 Xshell 等工具连接虚拟机失败&#xff0c;我们可以从以下的几个方面进行检查和解决 检查连接工具中的连接会话配置是否正确 对于这方面&#xff0c;我们要检查连接工具中连接会话配置的虚拟机 IP 地址和端口号是否正…

理解Harris角点检测的数学原理

Harris角点检测的数学原理 Harris角点检测基于图像的局部自相似性,它通过分析图像窗口在各个方向上移动时灰度变化的程度来识别角点,它通过计算每个像素点的Harris响应值来评估该点是否为角点。数学上,这种变化可以通过构建一个二次型函数来量化,该函数基于图像在x和y方向上…

Postman核心功能解析-参数化和测试报告

一、参数化处理 参数化&#xff1a;针对于某一个接口&#xff0c;有大量的的测试数据需要批量验证&#xff0c;一个一个的更改请求参数太耗时耗力&#xff0c;使用参数化批量处理数据会比较高效&#xff0c;常规通过文档参数化实现。 创建文件 格式CSV 文件内第一行信息 需要…

Ansible Playbook 精髓:书写与应用全攻略

Ansible Playbook 精髓&#xff1a;书写与应用全攻略 在当今的自动化运维领域&#xff0c;Ansible 以其简洁高效的特点受到了广泛欢迎。Playbook 作为 Ansible 的核心组件&#xff0c;允许我们使用人类可读的语言来描述配置和应用部署的过程。本文将深入探讨 Ansible Playbook…

音频干扰检测(时域方法)

请注意注释掉的代码&#xff1a;逐个包络比对就不能加窗了。 import librosa import numpy as np from scipy.signal import windows import matplotlib.pyplot as plt # 读取音频文件 audio_file sine.wav signal, sample_rate librosa.load(audio_file, srNone, mono…

操作系统的理解|冯·若依曼体系结构|进程的状态

操作系统的理解 冯诺伊曼体系结构为什么必须通过内存然后到cpu存储金字塔冯诺伊曼结构的改进在哪&#xff1f;我们可不可以全部用寄存器来做存储器在硬件数据流动角度学以致用&#xff1a;解释程序运行为什么要加载到内存程序没被运行之前存在哪里&#xff1f; 操作系统概念广义…

应急响应实战笔记04Windows实战篇(2)

第2篇&#xff1a;蠕虫病毒 0x00 前言 ​ 蠕虫病毒是一种十分古老的计算机病毒&#xff0c;它是一种自包含的程序&#xff08;或是一套程序&#xff09;&#xff0c;通常通过网络途径传播&#xff0c;每入侵到一台新的计算机&#xff0c;它就在这台计算机上复制自己&#xff…

第一个C++程序,我也没看明白,暂时。

#include<iostream> using namespace std; int main() { cout << "hello world and you too number!" << endl; system("pause"); return 0; } 运行结果为&#xff1a;

优化生产流程,解决无尘布擦拭留下划痕问题

在现代化工生产中&#xff0c;无尘布被广泛应用于清洁工作&#xff0c;然而&#xff0c;河北一家化工企业在使用无尘布进行擦拭时却发现产品表面留下了划痕&#xff0c;给生产过程带来了不小的困扰。针对这一问题&#xff0c;一家化工企业向供应商优斯特寻求解决方案&#xff0…

AI视频激光综合驱鸟装置:全自动、大范围驱鸟 | 真驱鸟科技

在电力系统中&#xff0c;鸟害事故已成为一个不容忽视的问题&#xff0c;直接威胁到电网的正常运行。但鸟类拥有极强的环境适应能力&#xff0c;它们能够在各种环境中生存和繁衍。这种强大的适应性使得传统的单一功能驱鸟器&#xff0c;在面对鸟类时显得力不从心&#xff0c;无…