cmake设定项目版本信息

2023-11-14

一、version.h.in模板文件

#pragma once


#define VER_MAJOR           1
#define VER_MINOR           0
#define VER_BUILD           1
#define VER_REVISION        @PROJECT_REVISION@



#define Stringizing(v)       #v


// generate rights
#define COPYRIGHT_STR()  \
    "Copyright (C) " "@PROJECT_BUILD_YEAR@"

// generate version string
#define VER_STR(major,minor,build,revision)  \
    "V" Stringizing(major) "." Stringizing(minor) "." Stringizing(build) "." Stringizing(revision) " " __DATE__ " " __TIME__

// generate file version 
#define FILE_VERSION_STR(major,minor,build,revision) \
    "V" Stringizing(major) "." Stringizing(minor) "." Stringizing(build) "." Stringizing(revision) "-" "@PROJECT_BUILD_DATE@" "T" "@PROJECT_BUILD_TIME@"

// generate product version 
#define PRODUCT_VERSION_STR(major,minor,build,revision) \
     "V" Stringizing(major) "." Stringizing(minor) "." Stringizing(build) "." Stringizing(revision) "-" "@PROJECT_BUILD_DATE@" "T" "@PROJECT_BUILD_TIME@"

二、version.rc

// version.rc.in
#include <Version.h>



1 VERSIONINFO
FILEVERSION VER_MAJOR, VER_MINOR, VER_BUILD, VER_REVISION
PRODUCTVERSION VER_MAJOR, VER_MINOR, VER_BUILD, VER_REVISION
 FILEFLAGSMASK 0x17L
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x4L
 FILETYPE 0x0L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
            VALUE "FileDescription", ""
            VALUE "FileVersion", FILE_VERSION_STR(VER_MAJOR,VER_MINOR,VER_BUILD,VER_REVISION)
            VALUE "InternalName", ""
            VALUE "LegalCopyright", COPYRIGHT_STR()
            VALUE "OriginalFilename", ""
            VALUE "ProductName", ""
            VALUE "ProductVersion",  PRODUCT_VERSION_STR(VER_MAJOR,VER_MINOR,VER_BUILD,VER_REVISION)
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1200
    END
END

PS:version.rc在所做目录源文件目录/version/version.rc

三、svn/git提交revision获取函数

# generate project version
function(modify_project_version)
    string(TIMESTAMP PROJECT_BUILD_YEAR "%Y")
    string(TIMESTAMP PROJECT_BUILD_DATE "%Y%m%d")
    string(TIMESTAMP PROJECT_BUILD_TIME "%H%M%S")

    # get svn/git commit reversion
    if(EXISTS "${PROJECT_STORE_PATH}/.git/")
        find_package(Git)
        if(GIT_FOUND)
            execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags RESULT_VARIABLE res_code OUTPUT_VARIABLE GIT_COMMIT_ID)
            if(${res_code} EQUAL 0)
                message("-- Get git revision success")
                # -g: tag of git
                string(FIND  ${GIT_COMMIT_ID} "-g" pos)
                if(${pos} GREATER 0)
                    string(SUBSTRING ${GIT_COMMIT_ID} ${pos} -1 COMMIT_ID)
                    string(SUBSTRING ${COMMIT_ID} 2 -1 PROJECT_REVISION)
                    message("-- Git commit id: ${PROJECT_REVISION}")
                endif()
            else(${res_code} EQUAL 0)
                message( WARNING "-- Git failed (not a repo, or no tags). Build will not contain git revision info." )
            endif(${res_code} EQUAL 0)
        else(GIT_FOUND)
            message("-- Git not found!)")
        endif(GIT_FOUND)
    else(EXISTS "${PROJECT_STORE_PATH}/.git/")
        if(EXISTS "${PROJECT_STORE_PATH}/.svn/")
            FIND_PACKAGE(Subversion)
            if(SUBVERSION_FOUND)
                Subversion_WC_INFO(${CMAKE_CURRENT_SOURCE_DIR} Project)
                SET(PROJECT_REVISION ${Project_WC_REVISION})
                message("-- Svn revision:${PROJECT_REVISION}")
            else(SUBVERSION_FOUND)
                message("-- Can't find packet Subversion")
            endif(SUBVERSION_FOUND)
        else()
            message(ERROR "-- Svn directory not exists")
        endif(EXISTS "${PROJECT_STORE_PATH}/.svn/")
    endif(EXISTS "${PROJECT_STORE_PATH}/.git/")

    # generate the version file
    set(VERSION_FILE ${CMAKE_CURRENT_SOURCE_DIR}/Version/Version.h)
    configure_file("${CMAKE_CURRENT_SOURCE_DIR}/Version/Version.h.in"
                "${VERSION_FILE}"
    @ONLY)

endfunction()

四、版本信息获取

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

cmake设定项目版本信息 的相关文章

  • git diff 在尖括号中显示 unicode 符号

    我有一个带有 unicode 符号 俄语文本 的文件 当我修复一些拼写错误时 我使用git diff color words 看看我所做的改变 如果是 unicode 西里尔文 符号 尖括号会造成一些混乱 如下所示 cat p1 cat p
  • 推送时发生 Git 错误 - update_ref 失败

    当我尝试推送本地提交时遇到问题 这可能是在 Android Studio 崩溃时发生的 这是错误 update ref 引用 refs remotes origin master 失败 无法锁定 ref refs remotes origi
  • readthedocs 中自动生成的索引文件

    我无法上传到阅读文档 http docs readthedocs io en latest 我为我的项目准备的文档 我正在尝试了解问题所在 该文档在本地构建良好make html但我无法上传 GitHub 项目是ASCII基因组 https
  • git push heroku master 权限被拒绝

    我正在关注 ruby railstutorial 我运行命令 git push heroku master 它吐出了这个错误 Permission denied publickey fatal Could not read from rem
  • 使用 cmake 处理头文件依赖关系

    我正在一个小型 C 项目上使用 CMake 到目前为止 它运行得很好 有一点点 x 当我更改头文件时 通常需要重新编译许多源文件 直接或间接包含它的文件 但是 cmake 似乎只检测到some的源文件被重新编译 导致损坏状态 我可以通过清除
  • 有没有办法让 git flow 显示它在幕后执行的命令?

    有什么方法可以让 git flow 提前告诉我当我执行 flow 命令时它将执行的确切 git 命令吗 或者告诉我它是东吗 我只能看到输出和摘要吗 你可以使用Git的GIT TRACE 环境变量 http git scm com docs
  • git Push over sshfs 失败,并显示“关闭 sha1 文件时出错:错误的文件描述符”

    我们使用 sshfs 通过 SSH 安装文件系统 并将其用作 git 存储库协作的远程存储 Mac OSX 10 6 6 到 RHEL 3 服务器 SSHFS 版本 2 2 MacFUSE SSHFS 2 2 0 MacFUSE 库版本 F
  • MinGW Make 抛出“系统找不到指定的路径。”错误

    我正在尝试在 Windows 7 上使用 cmake 生成一个 c 项目 在实际创建项目之前 cmake 会对您的工具链进行快速测试 我正在使用 MinGW 这就是我的问题所在 Cmake 触发 make 构建 最终失败并返回 系统找不到指
  • SVN运行上下文错误:现有连接被远程主机强制关闭

    我在 Debian Wheezy 构建服务器上创建了一个 SVN 存储库 如下所示本教程 http www networkworld com article 2224093 opensource subnet use subversion
  • git 匹配多个单词的标签

    我们可以得到最后一个 git 标签 它以一个单词 例如 TEST 开头 如下所示 git describe tag dirty match TEST 我想知道如何获得最后一个以 word1 开头的标签orword2 例如测试OR跑步 我尝试
  • 如何在 C++ 项目的 Cmake 文件上添加 Mac OS 框架

    我正在尝试将外部库 Vulkan 添加到我的项目中 这个库是预编译的并且有一个框架 我的项目树 build source Entry main cpp include ext vulkan macos include lib Framewo
  • 第一次使用node.js - “ReferenceError:节点未定义”

    我刚刚安装了node js 我尝试编写应该检查版本的node v 但它不起作用 这是输出 gt node v ReferenceError node is not defined at repl 1 2 at REPLServer self
  • VS 2015 + Bower:在防火墙后面不起作用

    Problem 在 Visual Studio 2015 中 使用 Bower 我的包在防火墙后面时恢复失败 并出现类似以下内容的错误 ECMDERR 无法执行 git ls remote tags heads git github com
  • 是否可以使用 gold 链接器编译和链接 Clang/LLVM?

    我正在为 LLVM Clang 编写自定义通道 重新编译往往需要一段时间并使用大量内存 我听说 gold 链接器 1 比标准 ld 链接器花费更少的时间并且 2 使用更少的内存 有没有办法将标志传递到 LLVM Clang 构建过程并更改为
  • 在 Azure DevOps 项目之间移动存储库时保留拉取请求

    我在同一帐户内有两个 Azure DevOps 项目 我想将存储库从一个项目移动到另一个项目 这一页探索如何在具有完全保真历史记录的团队项目之间移动 git 存储库 https learn microsoft com en us azure
  • 如何从 CMake 构建目标仅生成目标文件 (*.o)?

    我正在尝试使用 CMake 构建一个对象文件 但我似乎无法让 CMake 构建除完整可执行文件之外的其他内容 我基本上是在寻找以下编译的结果 结果将加载到 VxWorks 目标上并然后链接 CC CFLAGS INC DIRS c src
  • 带有 LDAP 身份验证的 SVN 不起作用

    我首先从我的设置开始 为此我们有 2 台服务器 Server1 将用于所有源代码 文件等 在 Server2 上 我们拥有所有用户信息和登录信息 两台服务器都运行在 Centos 6 4 上 现在我们要在 server1 上设置一个 SVN
  • 如何克隆特定的 Git 标签

    From git clone 1 手册页 http git scm com docs git clone branch还可以在结果存储库中的该提交处获取标签并分离 HEAD 我试过 git clone branch
  • TortoiseSVN 不要求身份验证?

    我已经在conf文件中设置了一个新的SVN存储库 运行SVNServe anon access none SVNServe 忠实地正确地做到了这一点 但是当我尝试使用 TortoiseSVN 浏览存储库时 它只是说不允许访问 它不应该要求我
  • 当当前分支上有未提交的更改时签出另一个分支

    大多数时候 当我尝试签出另一个现有分支时 如果我在当前分支上有一些未提交的更改 Git 会不允许我这样做 所以我必须首先提交或隐藏这些更改 然而 有时 Git 确实允许我在不提交或存储这些更改的情况下签出另一个分支 并且它会将这些更改携带到

随机推荐

  • 四叉树初步研究

    JS 四叉树初步研究 四叉树 为何要叫四叉树 二叉树与八叉树又是生么东东 看样子理解起来比较困难 实现该如何入手 树 就是树的结构 树根 树干 树枝 树叶 还有好吃的果实 o 其实树这种结构 很常见的 JSON 不就是最普通的树吗 四叉树的
  • html js清除缓存,js清除浏览器缓存的几种方法

    JS 缓存的问题一直都是我们又爱又恨的东西 也是我们比较头痛的问题 一方面为了提高网站响应速度 减少服务器的负担 和节省带宽 将需要将静态资源缓存在客户端 但是另一方面 当js 文件有改动的时候 如何快速的将客户端缓存的js文件都失效 这是
  • win环境下emacs实现markdown的html预览

    1 参考文档 https libraries io github jrblevin markdown mode 2 实现的核心思想是用pandoc生成html进行markdown的预览 把pandoc exe直接放到emacs bin目录下
  • windows 虚拟机相关功能、组件梳理

    简介 英文名称 中文名称 说明 Container 容器 Guarded Host 受保护的主机 利用远程证明创建并运行受防护的虚拟机 Hyper V Hyper V Management Tools Hyper V 管理工具 包含 GUI
  • Java Stream 实用特性:排序、分组和 teeing

    排序 基本数据类型排序 基本数据类型就是字符串 整型 浮点型这些 也就是要排序的列表中的元素都是这些基本类型的 比如 List
  • C#__资源访问冲突和死锁问题

    线程的资源访问冲突 多个线程同时申请一个资源 造成读写错乱 解决方案 上锁 lock 执行的程序段 同一时刻 只允许一个线程访问该程序段 死锁问题 程序中的锁过多 某一线程需要多个锁资源 而某个资源被另一线程占用 另一个线程同样如此 谁也不
  • 【mysql索引】之多列索引

    第零步 简单说一说 多列索引并不是指建立多个单列索引 而是指在多个字段建立一个索引 在多个列上建立独立的单列索引大部分情况下并不能提高MySQL的查询性能 MySQL在5 0之后推出了索引合并策略 index merge 一定程度上可以使用
  • 解决哥斯拉内存马 pagecontext 的问题

    零基础学黑客 搜索公众号 白帽子左一 前言 注入内存马借助当前的webshell工具而言 冰蝎可以通过创建hashmap放入request response session替换pagecontext来解决 HttpSession sessi
  • Failed to encrypt the section connectionStrings using provider RsaProtectedConfigurationProvider

    使用aspnet regiis exe加密web config connectionStrings时奇奇怪怪的错误 Failed to encrypt the section connectionStrings using provider
  • java必刷题——正则表达式

    题目 需求分析 解题思路 获取用户输入的 需矫正字符总数 根据用户输入的 总数 对错误字符进行矫正 技术栈 java正则表达式 代码实现 package OpenClosedPrinciple import java util Scanne
  • OAuth2.0认证原理浅析

    一 OAuth是什么 OAuth的英文全称是Open Authorization 它是一种开放授权协议 OAuth目前共有2个版本 2007年12月的1 0版 之后有一个修正版1 0a 和2010年4月的2 0版 1 0版本存在严重安全漏洞
  • 深入浅出——搞懂卷积神经网络的过拟合、梯度弥散、batchsize的影响的问题(二)

    上一篇主要是对卷积神经网络的整个训练过程中公式以及误差的推导给出详细的分析 博客地址 http blog csdn net u010402786 article details 51226825 这一篇主要对卷积神经网络中出现的一些问题进行
  • 网站更换域名后链接的更改(运维端)

    公司由于备案的问题 需要将域名www servera com更换为www serverb com 但是原先网站所有链接均指向www servera com 这个时候可以通过2种方法 1 在负载均衡器增加301跳转 这样打开每个www ser
  • 阿里云ecs.u1-c1m1.large服务器u1实例通用算力型CPU性能评测

    阿里云服务器ecs u1 c1m1 large为2核2G的通用算力型u1服务器 CPU采用2 5 GHz主频的Intel Xeon Platinum 8163 Skylake 或者8269CY Cascade Lake 阿里云百科分享阿里云
  • Use a SAML Token to Obtain a vCloud Suite Session ID ----使用SAML 令牌 获取VCloud 会话ID

    原文 span style font size 12px Another case is when the client requests a vCloud Suite endpoint on the management node the
  • Web components新玩具——X-View

    X View是一款遵循Web Components规范 类似React语法的JavaScript library 支持的特性 Object assign WeakMap Custom Elements Shadow DOM
  • JS调试日志输出和异常处理

    一 直接启用浏览器调试功能 Chrome浏览器中 1 按下F12打开调试界面 2 选择source选项卡 选中script文件打开 3 单击行增删断点 F10单步调试 F11进入函数 F8下一个断点 鼠标移动到变量上可以查看该变量的值 4
  • 信号量、互斥体和自旋锁的区别

    cpp view plaincopyprint 信号量 互斥体允许进程睡眠属于睡眠锁 自旋锁则不允许调用者睡眠 而是让其循环等待 所以有以下区别应用 1 信号量和读写信号量适合于保持时间较长的情况 它们会导致调用者睡眠 因而自旋锁适合于保持
  • 什么是算法?

    算法 解决特定问题求解步骤的描述 在计算机中表现为指令的有限序列 并且每条指令表示一个或多个操作 算法特性 输入 输出 有穷性 确定性 可行性 算法设计的要求 正确性 1 算法程序没有语法错误 2 算法程序对于合法输入数据能够产生满足要求的
  • cmake设定项目版本信息

    一 version h in模板文件 pragma once define VER MAJOR 1 define VER MINOR 0 define VER BUILD 1 define VER REVISION PROJECT REVI