CMake增加版本号

2023-11-12

为工程设置版本号,当然可以在源文件中增加版本号变量,但也可以使用CMakeLists.txt设置可变的版本号,提供更多的便利性。

1、修改CMakeLists.txt

用set命令设置版本号

# 设置最大版本号和最小版本号
set(CalculateSqrt_version_major 1)
set(CalculateSqrt_version_minor 0)

配置一个头文件将版本号传递给源文件

configure_file(
	"${CalculateSqrt_SOURCE_DIR}/CalculateSqrtConfig.h.in"
	"${CalculateSqrt_BINARY_DIR}/CalculateSqrtConfig.h"
)

其中“.h.in”是新建文档,在源文件目录下,“.h”文件是自动生成文件,在生成目录下。
在使用CalculateSqrtConfig.h文件的时候告诉工程搜索路径:

#包含头文件
target_include_directories(
    CalculateSqrt 
	PUBLIC
	 "${PROJECT_BINARY_DIR}"
)

整体的CMakeLists.txt:

cmake_minimum_required(VERSION 3.10)

# 设置工程名
project(CalculateSqrt VERSION 1.0)

# 设置最大版本号和最小版本号
set(CalculateSqrt_version_major 1)
set(CalculateSqrt_version_minor 0)

#将版本号传递给源文件,.h.in是新建文档,.h文件是自动生成文件
configure_file(
	"${CalculateSqrt_SOURCE_DIR}/CalculateSqrtConfig.h.in"
	"${CalculateSqrt_BINARY_DIR}/CalculateSqrtConfig.h"
)

# 添加文件
add_executable(CalculateSqrt main.cpp)

#包含头文件
target_include_directories(CalculateSqrt PUBLIC "${PROJECT_BINARY_DIR}")

2、编写CalculateSqrtConfig.h.in

// the configured options and settings CalculateSqrt
#define CalculateSqrt_VERSION_MAJOR @CalculateSqrt_VERSION_MAJOR@
#define CalculateSqrt_VERSION_MINOR @CalculateSqrt_VERSION_MINOR@

3、工程添加.h文件

在实现源文件,main.cpp中添加包含

#include "CalculateSqrtConfig.h"

输出版本号:

std::cout << "The version of CalculateSqrt is:" << CalculateSqrt_VERSION_MAJOR << std::endl;

以上就可以正常编译、链接。
再看生成的.h文件,其实就是定义了两个宏,而宏的数据是由.h.in文件传过去的。

4、问题:

尝试之中出现这个错误:

  Cannot specify include directories for target "CalculateSqrt" which is not
  built by this project.

这个问题是将“target_include_directories”语句放到“add_executable”之后,更换之后正常。这是由于“target_include_directories”命令中第一个参数< target >必须由add_executable()或add_library()等命令创建的。

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

CMake增加版本号 的相关文章

  • UTF8/UTF16 和 Base64 在编码方面有什么区别

    In c 我们可以使用下面的类来进行编码 System Text Encoding UTF8 System Text Encoding UTF16 System Text Encoding ASCII 为什么没有System Text En
  • 自动从 C# 代码进行调试过程并读取寄存器值

    我正在寻找一种方法来读取某个地址的 edx 注册表 就像这个问题中所问的那样 读取eax寄存器 https stackoverflow com questions 16490906 read eax register 虽然我的解决方案需要用
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • 当 Cortex-M3 出现硬故障时如何保留堆栈跟踪?

    使用以下设置 基于 Cortex M3 的 C gcc arm 交叉工具链 https launchpad net gcc arm embedded 使用 C 和 C FreeRtos 7 5 3 日食月神 Segger Jlink 与 J
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 为什么模板不能位于外部“C”块内?

    这是一个后续问题一个答案 https stackoverflow com questions 4866433 is it possible to typedef a pointer to extern c function type wit
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • AccessViolationException 未处理

    我正在尝试使用史蒂夫 桑德森的博客文章 http blog stevensanderson com 2010 01 28 editing a variable length list aspnet mvc 2 style 为了在我的 ASP
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • 窗体最大化时自动缩放子控件

    有没有办法在最大化屏幕或更改分辨率时使 Windows 窗体上的所有内容自动缩放 我发现手动缩放它是正确的 但是当切换分辨率时我每次都必须更改它 this AutoScaleDimensions new System Drawing Siz
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • 数据库一对多查询

    环境搭建 实体类 Data public class Teacher private int id private String name private List
  • anaconda不同设备之间的环境复制问题

    问题 由于一些原因 需要从别的机器上复制环境到新的机器上 直接找到anaconda3 envs 下的环境 整个包复制到新的机器上的相同路径下 但是这样虽然能够使用python 并且import其中的库 但是如果要使用pip的时候 会报错 b
  • QT 信号与槽

    QT核心便是信号与槽 通过信号将数据在界面和类中 在本类和其他类中发送和接收 信号负责发送数据 也可以单纯的发送信号 槽负责接收 系统自定义的槽 在相应组件上单机右键转到槽即可看见这列表 例如 一般按钮事件的点击 clicked 松开 re
  • RecyclerView详解 —— 自定义动画

    RecyclerView的强大之处相信大家已经体验到了 在上一篇RecyclerView详解 自定义分割线我们学习了如何定义分割线 本篇将介绍如何自定义动画 Google为我们提供了一个默认的动画实现 DefaultItemAnimator
  • index.android.js打包,Taro 打包apk步骤(Android 打包)

    前提 已经在taro壳子中做了相关打包的配置 已经在taro壳子中做了相关打包的配置 已经在taro壳子中做了相关打包的配置 taro版本2 2 13 1 把项目根目录下的rn temp文件夹复制到壳子根目录 taro native she
  • 打开tensorboard时出现错误:module ‘tensorflow‘ has no attribute ‘estimator‘

    打开tensorboard时出现错误 module tensorflow has no attribute estimator 一 错误现象 二 解决方法 三 错误原因 一 错误现象 二 解决方法 1 打开python的安装目录 找到文件
  • mathjax 数学公式的使用

    这里使用的是mathjax2 7 5版本 其他版本或有不同 下载地址 https github com mathjax MathJax releases tag 2 7 5 MathJax默认样式在被鼠标focus的时候 会有蓝色边框出现
  • 电脑分盘怎么分?分盘详细教程来了,图文教学

    电脑作为小伙伴日常生活使用的工具 很多事情都需要使用电脑来进行处理 虽然小伙伴使用电脑比较多 但是还是有不少的小伙伴不知道电脑分盘怎么分 其实电脑分盘很简单 下面小编就以图文教学的方式 详细的向小伙伴介绍电脑分盘教程 电脑分盘怎么分 很多小
  • 复化中矩形matlab函数法,MATLAB–Mupad 初学者(四)~(八)

    四 函数的创建 一 用赋值运算符创建函数 y 2 x 1 二 用映射创建函数 格式 f x gt body 简化函数后再创建函数 f x gt body直接创建函数 f x gt x 2 1 注意有无等号的区别 三 创建分段函数 1 pie
  • 计算机组成原理(2)-软件设计(二十三)

    计算机组成原理 1 软件设计 二十二 https blog csdn net ke1ying article details 129372288 一 层次化存储结构 速度由慢到快 外存 辅存 硬盘 光盘 U盘 gt 内存 主存 gt cac
  • 【无标题】如何实现权限过滤

    springboot mybatis plus关于数据权限过滤应该怎么实现 spring boot java 角色和部门关联 每个角色可以设置一个数据范围 1全部数据权限 2自定数据权限 3本部门数据权限 4本部门及以下数据权限 5仅本人数
  • PaxosStore解读

    PaxosStore解读 1 QuorumKV NWR 微信有大量分布式存储 QuorumKV 使用这个算法保证一致性 我们对这个算法做了改进 创造性地把数据副本分离出版本编号和数据存到不同设备 其中N 3 数据只有2份 版本编号有3份 在
  • Qt/C++开发经验小技巧281-285

    悬停窗体QDockWidget默认在标题栏右键会弹出悬停模块的显示隐藏菜单 如果需要去掉 会发现设置Qt NoContextMenu或者事件过滤器拦截都是无效的 必须设置 dockWidget gt setContextMenuPolicy
  • adb logcat命令查看并过滤android输出log

    http blog csdn net hansel article details 38088583 cmd命令行中使用adb logcat命令查看Android系统和应用的log dos窗口按ctrl c中断输出log记录 logcat日
  • 小米路由器3潘多拉固件刷机教程

    小米路由器的官方固件优化不够好 很多人都出现限速 断流的现象 我之前也出现过限速的情况 最后没办法只能设置路由器定时重启 前几天突发奇想把定时重启关了 发现路由器居然连着好几天都没啥问题 我以为从此以后就能安心用了 可惜今天又出现了无法上网
  • Flutter Firebase身份验证教程

    在Flutter Firebase身份验证的这篇文章中 我们将了解如何使用Firebase的flutter插件向我们的Firebase应用程序验证用户身份 如果您不熟悉颤动 建议您先阅读此内容 然后再继续 它将为您提供有关抖动的基本概念 并
  • html 调高德地图 导航,地图控件-参考手册-地图 JS API

    在线插件是在基础地图服务上增加的额外功能 您可以根据自己的需要选择添加 插件分为两类 一类是地图控件 它们是用户与地图交互的UI元素 例如缩放控制条 ToolBar 等 一类是功能型插件 用来完成某些特定地图功能 比如鼠标工具 MouseT
  • Java多线程读取本地照片为二进制流,并根据系统核数动态确定线程数

    Java多线程读取图片内容并返回 1 ExecutorService线程池 2 效率截图 3 源码 1 ExecutorService线程池 ExecutorService线程池 并可根据系统核数动态确定线程池最大数 最大 最小线程数一致
  • vue打包上线如此简单

    大家好 我是大帅子 最近好多人私信我 要我出一期vue的打包上线的文章 那么今天他来了 废话不多说 我们直接开始吧 我们顺便给大家提一下vue项目中的优化 项目打包 1 打开终端 直接在终端输入 我把npm 跟 yarn的打包命令都放在这里
  • CMake增加版本号

    为工程设置版本号 当然可以在源文件中增加版本号变量 但也可以使用CMakeLists txt设置可变的版本号 提供更多的便利性 1 修改CMakeLists txt 用set命令设置版本号 设置最大版本号和最小版本号 set Calcula