小知识·CMake使用

2023-11-07

目录

1 cmake 变量引用的方式

2 cmake 自定义变量的方式

3 cmake 常用变量

4 cmake 调用环境变量的方式

5 系统信息

6 主要的开关选项

7 小结


 

1 cmake 变量引用的方式

使用 ${} 进行变量的引用。在 IF 等语句中,是直接使用变量名而不通过 ${} 取值。

2 cmake 自定义变量的方式

主要有隐式定义和显式定义两种,举一个隐式定义的例子,就是 PROJECT 指令,他会隐式的定义<projectname>_BINARY_DIR 和<projectname>_SOURCE_DIR 两个变量。

而显式定义的例子,可以使用 SET 指令,就可以构建一个自定义变量了。

3 cmake 常用变量

1,PROJECT_BINARY_DIR

如果是 in source 编译,这个变量指得就是工程顶层目录,如果是 out-of-source 编译,指的是工程编译发生的目录。另外 <projectname>_BINARY_DIR 和 CMAKE_BINARY_DIR 跟这个变量指代的内容是一致的。


2,PROJECT_SOURCE _DIR

不论采用何种编译方式,都是工程顶层目录。也就是在 in source 编译时,他跟 PROJECT_BINARY_DIR 等变量一致。另外 <projectname>_SOURCE_DIR 和 CMAKE_SOURCE_DIR 跟这个变量指代的内容是一致的。


3,CMAKE_CURRENT_SOURCE_DIR

指的是当前处理的 CMakeLists.txt 所在的路径。


4,CMAKE_CURRRENT_BINARY_DIR

如果是 in-source 编译,它跟 CMAKE_CURRENT_SOURCE_DIR 一致,如果是 out-ofsource 编译,他指的是 target 编译目录。使用 ADD_SUBDIRECTORY(src bin) 可以更改这个变量的值。


5,CMAKE_CURRENT_LIST_FILE

输出调用这个变量的 CMakeLists.txt 的完整路径。


6,CMAKE_CURRENT_LIST_LINE

输出这个变量所在的行。


7,CMAKE_MODULE_PATH

这个变量用来定义自己的 cmake 模块所在的路径。如果你的工程比较复杂,有可能会自己编写一些 cmake 模块,这些 cmake 模块是随你的工程发布的,为了让 cmake 在处理CMakeLists.txt 时找到这些模块,你需要通过 SET 指令,将自己的 cmake 模块路径设置一下。比如
SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
这时候你就可以通过 INCLUDE 指令来调用自己的模块了。


8,EXECUTABLE_OUTPUT_PATH 和 LIBRARY_OUTPUT_PATH

前者用来重新定义目标二进制可执行文件的存放位置,后者用来重新定义目标链接库文件的存放位置。


9,PROJECT_NAME

返回通过 PROJECT 指令定义的项目名称。

4 cmake 调用环境变量的方式

使用 $ENV{NAME} 指令就可以调用系统的环境变量了。比如

MESSAGE(STATUS “HOME dir: $ENV{HOME}”)

设置环境变量的方式是:

SET(ENV{变量名} 值)

5 系统信息

1,CMAKE_MAJOR_VERSION,CMAKE 主版本号,比如 2.4.6 中的 2
2,CMAKE_MINOR_VERSION,CMAKE 次版本号,比如 2.4.6 中的 4
3,CMAKE_PATCH_VERSION,CMAKE 补丁等级,比如 2.4.6 中的 6
4,CMAKE_SYSTEM,系统名称,比如 Linux-2.6.22
5,CMAKE_SYSTEM_NAME,不包含版本的系统名,比如 Linux
6,CMAKE_SYSTEM_VERSION,系统版本,比如 2.6.22

6 主要的开关选项

1,CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS

用来控制 IF ELSE 语句的书写方式。


2,BUILD_SHARED_LIBS

这个开关用来控制默认的库编译方式,如果不进行设置,使用 ADD_LIBRARY 并没有指定库类型的情况下,默认编译生成的库都是静态库。

如果 SET(BUILD_SHARED_LIBS ON)后,默认生成的为动态库。


3,CMAKE_C_FLAGS

设置 C 编译选项,也可以通过指令 ADD_DEFINITIONS()添加。


4,CMAKE_CXX_FLAGS

设置 C++编译选项,也可以通过指令 ADD_DEFINITIONS()添加。

7 小结

本文介绍了一些较常用的 cmake 变量,这些变量仅仅是所有 cmake 变量的很少一部分,如果需要了解更多的 cmake 变量,更好的方式是阅读一些成功项目的 cmake 工程文件,比如 KDE4 的代码。

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

小知识·CMake使用 的相关文章

随机推荐

  • python判断网络是否通

    提供两种方法 netstats py coding gbk import myarp import os class netStatus def internet on self ip 192 168 150 1 os system arp
  • 软件架构设计(四) 基于服务的架构(SOA)

    前面我们了解到了层次架构中表示层的架构分层 分为了MVC MVP MVVM等架构风格 下面我们了解一下SOA架构与微服务架构 什么是服务 服务是一种为了满足某项业务需求的操作 规则等的逻辑组合 它包含了一系列有序活动的交互 为实现用户目标提
  • Xshell 提示 “找不到匹配的host key算法”

    记录 Xshell 6 使用中遇到的 找不到匹配的host key算法 问题 问题现象 ssh远程服务器直接弹窗提示 找不到匹配的host key算法 检查点 首先查看下 sshd 的配置文件 etc ssh sshd config 确认下
  • 剑指 Offer 53 - I. 在排序数组中查找数字 I

    题目链接 53 I 在排序数组中查找数字 I 思路分析 利用二分查找即可 class Solution public int search vector
  • QT5.15.2在线安装教程(详细图文)

    一 在线安装的原因 QT对5 15以及以上版本已经停止提供离线安装包 但是 5 15以及以上版本都支持在线安装 Qt5 15以下版本可直接在Index of archive qt中下载离线安装包 二 QT账号的注册 1 打开百度 搜索QT
  • 小学科技创新项目的查新报告

    我们也经常看到这些 别人家的孩子 11岁杨荷馨 南京市六合区玉带镇中心小学伸缩式车厢卡车第六届国际发明博览会的银牌 已经申请国家专利 11岁小学生发明节能燃气灶 11岁女 发明家 造智能温控电风扇获金奖 那么现在当你家小朋友也要参加小学科技
  • 四个收敛的关系:一致收敛,点态收敛,绝对收敛,条件收敛

    一致收敛和点态收敛 先看两者定义 一致收敛 任意正数 epsilon 存在 N gt 0 N gt 0 N gt 0 当
  • VUE-CLI测试环境和打包正式环境的配置切换

    config文件夹pro d env js文件 use strict module exports NODE ENV production API ROOT http 120 79 94 143 配置开发端口 config文件夹dev en
  • 化繁为简,使用Hibernate Validator实现参数校验(一)

    目录 前言 环境配置 导入依赖 基础校验 校验注解 参数绑定 PathVariable RequestParam RequestBody Validated Valid 单参校验 对象校验 分组校验 顺序校验 前言 在之前的悦享校园的开发中
  • docker 离线安装

    目录 服务介绍 软件下载 服务配置 二进制安装docker与docker compose 服务管理命令 服务介绍 docker 是一个供开发和运维人员开发 测试 部署和运行应用的容器平台 docker compose 是一个用于运行和管理多
  • 缓存案例-架构真题(二十二)

    试题一 某大型电商平台建立一个B2B商店系统 并在全国建设了仓储中心 但是在运营过程中 发现很多跨仓储中心调货 延误运送 为此建立全国仓储系统 通过对订单的分析和挖掘 并通过大数据分析预测各类配置 降低成本 当用户通过B2B商店下单 会通过
  • Notepad++ - 缓存目录

    C Users 你的用户名 AppData Roaming Notepad backup 被360清理了 或者程序崩溃了 死机了 都可以在这里找到
  • 华为OD机试经验(A 卷 2022Q4)

    文章目录 1 汇率 2 箱子之字形摆放 3 Excel单元格数值统计 先打个小广告 在我的Hr的指导帮助下 顺利通过了机试 两轮技术面 由于今年顺利研究生上岸 所以没有进行主管面试了 向各位想去华为OD的小伙伴们推荐我的对接Hr微信 蒋虎
  • 【亲测有用】腾讯会议共享PPT,并开启演讲者模式

    出发点 腾讯会议共享PPT 开启演讲者模型 并且观看屏幕的人根本看不到你的演讲者模型 我这边Win10亲测有用 我单笔记本屏幕测试 原理解释 通过播放PPT 产生了一个全屏 可以把它理解为是扩展屏 然后切回演讲者模式的那个屏幕 可以理解为电
  • Redis7--基础篇1(概述,安装、卸载及配置)

    1 Redis概述 1 1 什么是Redis Redis REmote Dictionary Server 远程字典服务器 Remote Dictionary Server 远程字典服务 是完全开源的 使用ANSIC语言编写遵守BSD协议
  • Elasticsearch实战(十三)---聚合搜索Aggs聚合及Count,Avg操作

    Elasticsearch实战 聚合搜索Aggs聚合及Count Avg操作 文章目录 Elasticsearch实战 聚合搜索Aggs聚合及Count Avg操作 1 聚合搜索 bucket 桶及metric分析计算 1 1 准备数据 2
  • vue3+element plus input输入框限制输入数字和小数点

    不能以小数点开头 且只能有一个小数点
  • 如何入门学习python爬虫技术?

    作为一门历史悠久的语言 Python比R更具有通用性 比C 更灵活 可以说Python是一个很全面的语言 尤其是在数据科学 机器学习和AI方面 表现很出色 如果想自学 怎么学习python爬虫技术 一 基础知识的掌握 什么是爬虫 数据是从哪
  • Linux查看内存,线程 ,CPU等情况

    有的时候需要看服务器的状态 比如内存使用状态 线程 CPU使用情况等 要掌握一些linux的命令是很必要的 所以我们大致总结一下这些命令 1 内存使用情况 方法一 top命令 top命令会显示内存 CPU还有swap硬盘等状况 我们可以通过
  • 小知识·CMake使用

    目录 1 cmake 变量引用的方式 2 cmake 自定义变量的方式 3 cmake 常用变量 4 cmake 调用环境变量的方式 5 系统信息 6 主要的开关选项 7 小结 1 cmake 变量引用的方式 使用 进行变量的引用 在 IF