CMake option选项使用方式及注意事项

news2024/9/22 5:27:05

CMAKE官网

🍘

在复习 CMake 的时候,使用了 option 功能,发现修改了参数的值之后,和未修改的效果一样,然后不断的查找 option 的使用方法,最后发现并非 option 使用方式而错误,而是 option 第一次编译修改的值是存入到 CMakeCache.txt 这个缓存里面,之后再次修改的值会不写入


option(USE_MYMATH “是否使用自己定义的函数” ON )🏟️

🏛️

USE_MYMATH cmake 预定义的名字,可以理解成为变量名字
USE_MYMATH: 变量名自己解释
ON/OFF: 值,也就是 0 和 1
设置好之后就可以自己的配置文件了
为了方便,就直接在当前的 CMakeList.txt 当前目录下创建 config.h.in 文件,然后写入一下内容:

#cmakedefine USE_MYMATH

表示 cmakefine 预先定义的变量 USE_MYMATH,这里的 USE_MYMATH 虽然名字相同,但是两者可以不一样,可以理解为 CMakeLists.txt 里的同名变量只是一个开关量,而这个就可以理解为一个参数值
🏬
下一步就是在 CMakeLists.txt 中书写我们的 configure_file 函数内容如下

configure_file (
  config.h.in
  config.h
)
  • config.h.in 中就是刚刚编写的 config 文件,然后.h.in就是后缀名字
  • config.h 也就是CMakeLists.txt 会根据config.h.in 文件生成的一个头文件,抽象的理解成为帮我们生成一个头文件的命令和参数定义传递

为了方便查看缓存值,直接在 CMakeLists.txt 中定义信息输出即可,内容如下,用来查看 USE_MYMATH 变量是否更改

message(STATUS USE_MYMATH: ${USE_MYMATH})

🍢
完成上述步骤之后,可以查看一下更改 ONOFF 的值是否会更改 USE_MYMATH 的值
ON:

-- USE_MYMATH:ON

OFF:

-- USE_MYMATH:ON

发现更换之后并没有更改到 USE_MYMATH 的值
然后就跑去看缓存文件 CMakeCache.txt,发现 bool 值还是 ON
在这里插入图片描述
后来觉得应该 option 选项是用来作为 CMakeLists.txt 的宏定义选项的,所以只会缓存一次
解决办法就是将 option 更改为 set 这样的简单粗暴的方法就好:

set (USE_MYMATH OFF)

ON:

-- USE_MYMATH:ON

OFF:

-- USE_MYMATH:OFF

CPP 文件夹 🍠

#ifdef USE_MYMATH
  #include "../math/testone.hpp"
#endif
int main()
{
#ifdef USE_MYMATH
  test();
#endif

CMakeLists.txt 🍥

# 定义工程根目录; CMAKE_SOURCE_DIR为内建变量,表示工程根目录的CMakeLists.txt文件路径
SET(ROOT_DIR ${CMAKE_SOURCE_DIR})

set (USE_MYMATH OFF)
option(USE_MYMATH "USE_MYMATH" ON )
message(STATUS USE_MYMATH: ${USE_MYMATH})

# 加入一个配置头文件,用于处理 CMake 对源码的设置
configure_file (
  ../src/config.h.in
  ../src/config.h
)
set(SRC_LIST main.cpp)
# 是否编译Math函数
if (USE_MYMATH)
  include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../math/)
  set(SRC_LIST main.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../math/testone.cpp)
endif (USE_MYMATH)
# 这样可以找到config.h头文件
include_directories(${CMAKE_CURRENT_BINARY_DIR})
ADD_EXECUTABLE(sample8 ${SRC_LIST})

🫕🫕🫕🫕🫕🫕🫕🫕🫕🫕🫕🫕🫕🫕🫕🫕🫕🫕🫕🫕🫕🫕🫕🫕🫕🫕🫕🫕🫕🫕🫕🫕🫕🫕🫕🫕


🌸🌸🌸完结撒花🌸🌸🌸
🌈🌈Redamancy🌈🌈


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

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

相关文章

SpringCloudAlibaba-分布式事务Seata

一、介绍官网:http://seata.io/zh-cn/index.html TC (Transaction Coordinator) - 事务协调者维护全局和分支事务的状态,驱动全局事务提交或回滚。TM (Transaction Manager) - 事务管理器定义全局事务的范围:开始全局事务、提交或回滚全局事务…

Mac Appium iOS自动化测试环境搭建教程

目录Appium环境搭建Mac iOS环境搭建Appium基础Appium进阶环境搭建安装brewCopyruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"安装javaCopybrew install java安装python3 及相关包Copybrew install python3 pip install selenium pip install app…

实现8086虚拟机(四)——mov 和 jmp 指令解码

文章目录mov 指令解码jmp 指令解码这篇文章举例来讲讲 mov 指令和 jmp 指令解码函数的实现,其他的指令解码函数都与这些类似。mov 指令解码 以 mov 指令中的一类:寄存器/内存 到/从 寄存器,来详细说明解码函数的实现。 机器指令格式如下&am…

联想M7268激光打印机开机红绿灯双闪报错不打印

故障现象: 一台联想M7268激光打印机开机后电源键、复印键一起双闪,电源键闪红灯、复印键闪绿灯; 检测维修: 根据闪灯故障判断如果无卡纸异常情况下可能是激光器故障,因为以前曾经维修过一台一模一样的机器故障基本相同,先打开机器吧,把硒鼓拿出来先看看有没有卡纸,进纸…

php小程序餐馆点餐订餐外卖系统

目录 1 绪论 1 1.1课题背景 1 1.2课题研究现状 1 1.3初步设计方法与实施方案 2 1.4本文研究内容 2 2 系统开发环境 4 2.2MyEclipse环境配置 4 2.3 B/S结构简介 4 2.4MySQL数据库 5 3 系统分析 6 3.1系统可行性分析 6 3.1.1经济可行性 6 3.1.2技术可行性 6 3.1.3运行可行性 6 …

c++11 标准模板(STL)(std::unordered_set)(二)

定义于头文件 <unordered_set> template< class Key, class Hash std::hash<Key>, class KeyEqual std::equal_to<Key>, class Allocator std::allocator<Key> > class unordered_set;(1)(C11 起)namespace pmr { templ…

python中的for循环以及枚举函数enumerate()

一、可迭代的对象&#xff08;iteratle_object&#xff09; python中可以使用for循环进行迭代的对象大致有以下几种类型&#xff1a; String(字符串)List(列表)Tuple(元组)Dictionary(字典)range()内置函数返回的对象 二、for循环迭代示例 1. 依次输出字符串"python&q…

printk浅析

内核printk原理介绍 - 知乎 (zhihu.com)34.Linux-printk分析、使用prink调试驱动 (bbsmax.com)【原创】计算机自制操作系统(Linux篇)五&#xff1a;内核开发之万丈高楼从地起---printk(理清pintf/vprintf&#xff1b;sprintf/vsprintf &#xff1b;fprintf/vfprintf) - 知乎 (z…

自抗扰控制ADRC之扩张观测器

目录 前言 1. 被控对象(被观测对象) 2.非线性观测器 2.1仿真分析 2.2仿真模型 2.3仿真结果 3.线性观测器 3.1仿真模型 3.2仿真结果 4.总结和学习问题 前言 什么叫观测器&#xff1f;为什么该类观测称为扩张观测器&#xff1f; &#xff1a;观测器可以理解为所观测…

组合数学原理与例题

目录 一、前言 二、计数原理 1、加法原理 2、分割立方体&#xff08;lanqiaoOJ题号1620&#xff09; 3、乘法原理 4、挑选子串&#xff08;lanqiaoOJ题号1621&#xff09; 5、糊涂人寄信&#xff08;lanqiaoOJ题号1622&#xff09; 6、战斗吧N皇后&#xff08;lanqiaoO…

依次判断数组1对中的每个元素是否小于等于数组2中对应位置的每个元素numpy.less_equal()

【小白从小学Python、C、Java】【计算机等级考试500强双证书】 【Python-数据分析】 依次判断数组1对中的每个元素是否 小于等于数组2中对应位置的每个元素 numpy.less_equal() [太阳]选择题 以下错误的一项是? import numpy as np a np.array([1,2,3]) b np.array([1,3,2]) …

kubernetes 核心技术-Pod(1)

概述&#xff1a; 首先要知道 Pod 不是容器&#xff01; 一、 基本概念 Pod 是 k8s 系统中可以创建和管理的最小单元。k8s 不会直接处理容器&#xff0c;而是podpod 包含多个容器(一组容器的集合)一个pod中容器共享网络命名空间pod是短暂的(生命周期) 二、Pod存在的意义 创建…

数据结构与算法总结整理(超级全的哦!)

数据结构与算法基础大O表示法时间复杂度大O表示法时间复杂度排序&#xff1a;最坏时间复杂度时间复杂度的几条基本计算规则内存工作原理什么是内存内存主要分为三种存储器随机存储器&#xff08;RAM&#xff09;只读存储器&#xff08;ROM&#xff09;高速缓存&#xff08;Cach…

玄子Share-BCSP助学手册-JAVA开发

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b2gPyAnt-1676810001349)(./assets/%E7%8E%84%E5%AD%90Share%E4%B8%89%E7%89%88.jpg)] 玄子Share-BCSP助学手册-JAVA开发 前言&#xff1a; 此文为玄子&#xff0c;复习BCSP一二期后整理的文章&#x…

多任务学习综述Multi-Task Deep Recommender Systems

Multi-Task Deep Recommender Systems: A Survey 最近看到一篇多任务学习的综述&#xff0c;觉得总结的不错&#xff0c;记录一下。 1. 简介 推荐系统天然具有多任务学习的需求&#xff0c;以视频推荐为例&#xff0c;用户具有点赞、评论、转发等不同的行为。多任务学习相比…

“生成音乐“ 【循环神经网络】

前言 本文介绍循环神经网络的进阶案例&#xff0c;通过搭建和训练一个模型&#xff0c;来对钢琴的音符进行预测&#xff0c;通过重复调用模型来进而生成一段音乐&#xff1b; 使用到Maestro的钢琴MIDI文件 &#xff0c;每个文件由不同音符组成&#xff0c;音符用三个量来表示…

千锋教育嵌入式物联网教程之系统编程篇学习-04

目录 alarm函数 raise函数 abort函数 pause函数 转折点 signal函数 可重入函数 信号集 sigemptyset() sigfillset sigismember()​ sigaddset()​ sigdelset()​ 代码讲解 信号阻塞集 sigprocmask()​ alarm函数 相当于一个闹钟&#xff0c;默认动作是终止调用alarm函数的进…

HSCSEC 2023 个人练习

&#x1f60b; 大家好&#xff0c;我是YAy_17&#xff0c;是一枚爱好网安的小白。本人水平有限&#xff0c;欢迎各位大佬指点&#xff0c;欢迎关注&#x1f601;&#xff0c;一起学习 &#x1f497; &#xff0c;一起进步 ⭐ 。⭐ 此后如竟没有炬火&#xff0c;我便是唯一的光。…

聊一聊国际化i18n

i18n 概述i18n 是国际化的缩写&#xff0c;其完整的写法是 Internationalization&#xff0c;翻译为国际化。国际化是指在软件开发中对于不同语言和地区的支持。目的是为了让一款软件可以在不同的语言和地区环境下正常运行&#xff0c;使其适应全球各地的用户。这通常包括对语言…

Simulink 自动代码生成电机控制:低阶滑模观测器仿真实现及生成代码在开发板上运行

目录 理论参考 仿真实现 运行演示 总结 前段实时搭过高阶的滑模观测器&#xff0c;相比于高阶的&#xff0c;普通的滑模观测器计算量小更适合计算能力低的MCU&#xff0c;这里参考Microchip的16位MCU所使用的观测器&#xff0c;通过Simulink建模仿真实现系统控制&#xff0…