cmake include命令

目录

cmake include命令

CMAKE_CURRENT_LIST_DIR:

CMAKE_CURRENT_LIST_FILE:

CMAKE_CUEERNT_LIST_LINE:

demo

top CMakeLists.txt

test.cmake

subDir下的 CMakeLists.txt

结果:


cmake include命令

include()命令也是将一个新的cmake内容引入当前cmake内容中.

格式:

include(fileName [OPTIONAL] [RESULT_VARIABLE myVar] [NO_POLICY_SCOPE])
include(module   [OPTIONAL] [RESULT_VARIABLE myVar] [NO_POLICY_SCOPE])

第一种形式有点类似与add_subdirectory()命令,但是有着重要的区别:

  • include()期望读取文件的名称,而add_subdirectory()期望一个目录,并将该目录中查找CMakeLists.txt文件.
  • 传递给include()的文件名通常具有扩展名.cmake,但它可以是任何东西.
  • include()不会引入新的变量作用域,而add_subdirectory()会引入.
  • 默认情况下,这两个命令都引入了一个新的策略作用域,但是可以使用NO_POLICY_SCOPE选项告诉include()命令不要这样做(add_subdirectory()没有此类选项).
  • CMAKE_CURRENT_SOURCE_DIR和CMAKE_CURRENT_BINARY_DIR变量的值在处理include()命令引入的文件时不会改变,而会为add_subdirectory()引入子目录而改变.

第二种形式具有完全不同的目的.它用于加载模块.

由于在调用include()时,CMAK_CURRENT_SOURCE_DIR的值不会改变,因此包含的文件我们很难计算出它所在的目录.

此外,与add_subdirectory()不同,文件名始终是CMakeLists.txt,当使用include()时,文件的名称可以是任何东西,因此包含的文件可能很难确定自己的名称.好在CMake给我们提供了另外一组变量.

CMAKE_CURRENT_LIST_DIR:

类似于CMAKE_CURRENT_SOURCE_DIR,只是在处理include的文件时才会更新.这是需要处理的当前文件的目录时使用的变量,无论它是如何添加到构建的.它永远是一个绝对路径.

CMAKE_CURRENT_LIST_FILE:

始终提供当前正在处理的文件的名称.它始终持有文件的绝对路径,而不仅仅是文件名.

CMAKE_CUEERNT_LIST_LINE:

保存当前正在处理的文件的行号.这个变量很少需要,但是在某些调试场景中很有用的.

demo

目录结构016文件下有一个top CMakeLists.txt 有一个cmake文件夹,里面有一个test.cmake文件,有一个subDir文件夹里面有一个 CMakeLists.txt 文件

top CMakeLists.txt

cmake_minimum_required(VERSION 3.26 FATAL_ERROR)project(project016VERSION 0.0.1LANGUAGES CXX)message("top: CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")
message("top: CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")
message("top: CMAKE_CURRENT_BINARY_DIR = ${CMAKE_CURRENT_BINARY_DIR}")
message("top: CMAKE_CURRENT_LIST_DIR   = ${CMAKE_CURRENT_LIST_DIR}")
message("top: CMAKE_CURRENT_LIST_FILE  = ${CMAKE_CURRENT_LIST_FILE}")
message("top: CMAKE_CURRENT_LIST_LINE  = ${CMAKE_CURRENT_LIST_LINE}")add_subdirectory(subDir)
message("-----------------------------------------------")
include(cmake/test.cmake)

test.cmake

cmake_minimum_required(VERSION 3.26 FATAL_ERROR)message("test.camke: CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")
message("test.camke: CMAKE_CURRENT_BINARY_DIR = ${CMAKE_CURRENT_BINARY_DIR}")
message("test.camke: CMAKE_CURRENT_LIST_DIR   = ${CMAKE_CURRENT_LIST_DIR}")
message("test.camke: CMAKE_CURRENT_LIST_FILE  = ${CMAKE_CURRENT_LIST_FILE}")
message("test.camke: CMAKE_CURRENT_LIST_LINE  = ${CMAKE_CURRENT_LIST_LINE}")

subDir下的 CMakeLists.txt

cmake_minimum_required(VERSION 3.26 FATAL_ERROR)message("child: CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")
message("child: CMAKE_CURRENT_BINARY_DIR = ${CMAKE_CURRENT_BINARY_DIR}")
message("child: CMAKE_CURRENT_LIST_DIR   = ${CMAKE_CURRENT_LIST_DIR}")
message("child: CMAKE_CURRENT_LIST_FILE  = ${CMAKE_CURRENT_LIST_FILE}")
message("child: CMAKE_CURRENT_LIST_LINE  = ${CMAKE_CURRENT_LIST_LINE}")

结果:

 

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

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

相关文章

速成版-带您一天学完vue2框架

vue是一个前端js框架,可以简化Dom操作,实现响应式数据驱动。前面全是废话,哈哈,接下来一起学习吧。 目录 一、vue基础 1.1、vue简介 1.2、第一个Vue程序 1.3、vue基础-el挂载点 1.4、data数据对象 二、本地应用-指令篇 2.…

树和二叉树的概念以及结构

目录 一、树概念及结构 1.1 树的概念 1.2 树的相关概念 1.3 树的表示 1.4 树在实际中的应用 二、二叉树概念及结构 2.1 概念 2.2 特殊的二叉树 2.3 二叉树的性质 2.4 二叉树的存储结构 梦想就是梦里想做的事,醒来后努力去实现。 一、树概念及结构 1.1 树…

高阶组件/react组件复用

也可以用children模式 优化 高阶组件 组件名称相同设置组件名字 效果 解决props丢失 setstate是异步更新的 推荐语法 页面更新完后的回调函数 组件性能优化 1. 2.

Github下载Failed to connect to github.com port 443: Timed out

方法一: 使用ssh下载的方式 方法二 使用github加速网站 https://gitclone.com ,用命令行: git clone https://http://gitclone.com/http://github.com/xxx/yyy 参考链接 github克隆失败提示“443:Timed out”怎么解决? - 知乎

mysql练习---多表连接查询

-- 创建部门表 create table if not exists dept3( deptno varchar(20) primary key , -- 部门号 name varchar(20) -- 部门名字 ); -- 创建员工表 create table if not exists emp3( eid varchar(20) primary key , -- 员工编号 ename varchar(20), -- 员工名字 age int, -- 员…

redis操作问题

使用redisTemplate 往set集合中批量添加值 # 第一种办法就是for循环&#xff0c;每次进行setfor (int i 0; i < 1000000; i) {redisTemplate.opsForSet().add("key",i);} # 第二中办法就是使用HashSet批量添加数据Set set new HashSet<>();for (int i 1…

计算机网络概述(三)

常见的计算机网络体系结构 OSI体系结构&#xff1a; 物理层→数据链路层→网络层→运输层→会话层→表示层→应用层 TCP/IP体系结构&#xff1a; 网络接口层→网际层→运输层→应用层 一般用户的设备都有TCP/IP协议用于连接因特网&#xff0c;TCP/IP的网络接口层并没有规定使用…

培训报名小程序实战开发

目录 1 需求描述2 原型绘制2.1 首页2.2 报名列表页2.3 报名页2.4 支付页面2.5 支付成功页面2.6 我的页面2.7 我的报名页面2.8 报名详情页面 3 数据源设计4 数据源开发5 创建模型应用6 录入测试数据7 创建自定义应用8 创建页面总结 经常有人问&#xff0c;低代码学习容易么&…

HarmonyOS学习路之开发篇—数据管理(融合搜索)

融合搜索概述 HarmonyOS融合搜索为开发者提供搜索引擎级的全文搜索能力&#xff0c;可支持应用内搜索和系统全局搜索&#xff0c;为用户提供更加准确、高效的搜索体验。 基本概念 全文索引 记录字或词的位置和次数等属性&#xff0c;建立的倒排索引。 全文搜索 通过全文索引进…

微服务之服务器缓存

Informal Essay By English In the difficult employment situation, we need to set a good goal and then do our own thing 参考书籍&#xff1a;“凤凰架构” 进程缓存&#xff08;Cache&#xff09; 缓存在分布式系统是可选&#xff0c;在使用缓存之前需要确认你的系统…

Redis - 附近商铺、用户签到、UV统计

文章目录 附近商铺、用户签到、UV统计一、附近商铺1.1 GEO数据结构1.2 导入店铺数据到GEO1.3 实现附近商户功能 二、用户签到2.1 BitMap2.2 签到功能2.3 统计连续签到2.3.1 分析2.3.2 代码实现 三、UV统计3.1 HyperLogLog用法3.2 测试百万数据的统计 附近商铺、用户签到、UV统计…

系统架构设计师-软件工程(3)

一、软件系统建模 1、结构化建模方法 结构化建模方法是以过程为中心的技术&#xff0c;可用于分析一个现有系统以及定义新系统的业务需求。结构化建模方法所绘制的模型称为数据流图&#xff08;DFD&#xff09;。对于流程较为稳定的系统可考虑结构化建模方法。 2、信息工程建模…