基于cmake為項目自動獲取git分支tag的版本號和commitid

目錄

  • 1. 引言
  • 2. 實現過程
    • 2.1 工程目錄規劃
    • 2.2 c程序文件
    • 2.3 CMakeLists.txt
    • 2.4 GitVersion.cmake文件
    • 2.5 BuildNumber.cmake文件

1. 引言

??在項目構建的時候,我們經常會希望能夠將git提交的分支信息和提交號(commitid)以及當前版本發布的tag信息作為版本號自動構建到程序里面,以便后續能夠快速定位所運行的程序所定影的git源碼的版本,從而快速發現和定位問題。
??本文利用cmake的自動構建能力,來實現以下信息的自動提取并構建到程序中:

  • 當前代碼的git 分支名
  • 當前代碼的git 提交號(commitid)
  • 當前代碼的tag所設置的版本號
  • 當前代碼的構建時間
  • 當前代碼的構建號(buildno)

??以下以c語言構成為例,展示了利用cmake自動生成config.h文件,將以上信息自動集成到c語言工程代碼中的過程。

2. 實現過程

2.1 工程目錄規劃

??如下圖:
在這里插入圖片描述|300

??其中有c語言源碼都放在工程根目錄下面,當然,對于比較大型的工程,可以對源碼目錄進行更細地拆分和規劃,本demo只有一個test.c和config.h的c源碼文件,因此源碼目錄從簡。
??創建一個cmake目錄,用來存放自定義的cmake模塊文件。
??創建一個build目錄,用來存放cmake運行所產生的輸出文件。

2.2 c程序文件

??test.c 文件的內容如下:

#include <stdio.h>
#include "config.h"int main()
{printf("version: %s\n", PROJECT_VERSION);printf("commit:  %s\n", GIT_COMMITID);printf("branch:  %s\n", GIT_BRANCH)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/44216.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/44216.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/44216.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

留學生的作業形式有哪些???

作業是在海外求學中不可避免的一部分&#xff0c;在國外留學&#xff0c;課程種類豐富多樣&#xff0c;每一門課程都有其獨特的學習要求和作業形式。課業壓力很大&#xff0c;不僅要應對各項quiz&#xff0c;日常各類作業也絲毫不能松懈。無論是文學、藝術&#xff0c;還是理工…

【JavaScript腳本宇宙】實時協同編輯:JavaScript 庫和框架全面解析

實時協同編輯&#xff1a;探秘JavaScript實時協同編輯利器## 前言 在當今互聯網時代&#xff0c;實時協同編輯成為了許多應用程序的重要功能之一。無論是團隊協作辦公軟件&#xff0c;還是在線教育平臺&#xff0c;都需要實現多人同時編輯文檔的功能。為了滿足這一需求&#x…

自建搜索引擎-基于美麗云

Meilisearch 是一個搜索引擎&#xff0c;主程序完全開源&#xff0c;除了使用官方提供的美麗云服務&#xff08;收費&#xff09;進行對接之外&#xff0c;還可以通過自建搜索引擎來實現完全獨立的搜索服務。 由于成本問題&#xff0c;本博客采用自建的方式&#xff0c;本文就…

通過git將文件push到github 遠程倉庫

1.先git clone 代碼地址 git clone htttp://github.com/用戶名/test.git 2. 添加文件 例如&#xff1a;touch 1.txt 3.將文件添加到暫存區 git add 1.txt 4.提交 git commit -m "commit 1.txt" 5.與遠程倉庫建立關聯 git remote add 遠程倉庫名 遠程倉庫…

(2024)docker-compose實戰 (9)部署多項目環境(LAMP+react+vue+redis+mysql+nginx)

前言 本系列最初的想法就是搭建一個多項目的環境, 包含nginx, nodejs, php, html, redis, MongoDB, mysql.本文使用的PHP鏡像為php:7.3.6-apache, 這里可以使用上一篇文章中生成好的鏡像.LAMP或包含react或vue的前端項目, 本文就各寫了一個, 可以按照實際需求, 自行添加多個容…

LLM 研究方向(一): LLM Prompts--p-tuning、LoRA

目錄 1. prompt-tuning background 2. Prompt Tuning 模型介紹 2.1 2021 prefix-tuning 2.2 2021 P-tuning v1 2.3 2021 Parameter-efficient prompt tuning (PET) 2.4 2022 P-tuning v2 2.5 2019 Adapter ?2.6 2021 LoRA (Low-Rank Adaptation) 2.7 2024 DoRA (…

詳解[USACO07OPEN] Cheapest Palindrome G(洛谷PP2890)(區間DP經典題)

題目 思路 考慮區間DP。 設dp[i][j]為從i到j這段區間被修正為回文串的最小花費 c[cc][1]為添加字符cc的花費 c[cc][2]為刪去字符cc的花費 s為題目給出的字符串。 用[i 1,j]區間轉移&#xff1a;這種轉移相當于在[i1,j]區間的左邊加入一個字符&#xff0c;讓[i,j]變為回文的方…

SQL 游標

關系數據庫中的操作會對整個行集起作用。 例如&#xff0c;由 SELECT 語句返回的行集包括滿足該語句的 WHERE 子句中條件的所有行。 這種由語句返回的完整行集稱為結果集。 應用程序&#xff0c;特別是交互式聯機應用程序&#xff0c;并不總能將整個結果集作為一個單元來有效地…

安裝Go語言常用工具

好的&#xff0c;這里是常用的Go工具&#xff0c;包括下載地址、在線安裝指令和離線安裝步驟。 1. gopls (Go language server) 功能: 提供代碼補全、跳轉定義、文檔提示等IDE功能。 下載地址: golang.org/x/tools/gopls 在線安裝命令 : sh 復制代碼 go install golang.org/…

云倉適合什么商家?

1、電商平臺和網店&#xff1a; 對于擁有大量在線訂單但沒有自建倉儲和物流能力的小型和中型電商企業&#xff0c;云倉可以在成本和效率上提供顯著優勢&#xff0c;幫助快速處理訂單并縮短配送時間。 —————————————————————————————————— …

根據關鍵詞query獲取google_img(api方式)

文章目錄 說明代碼第一部分&#xff1a;鏈接保存為Json第二部分&#xff1a;鏈接轉換為img 說明 根據關鍵詞query獲取google_img USERNAME “xxx” PASSWORD “xxx” 官網申請。 代碼 首先獲取圖片鏈接&#xff0c;保存為json之后下載。 第一部分&#xff1a;鏈接保存為…

.net 8 使用 quic 協議通訊

debian環境安裝 quic支持 # 1. 添加unstable倉庫&#xff08;如果您使用的是Debian的不穩定分支&#xff09; sudo apt install apt-transport-https ca-certificates sudo wget -O /etc/apt/trusted.gpg.d/microsoft.gpg https://packages.microsoft.com/keys/microsoft.asc …

【獨家揭秘】視頻號矩陣系統火爆上線,一鍵式多平臺管理,你的內容營銷神器!

在信息爆炸的時代&#xff0c;內容創作者們面臨著前所未有的挑戰與機遇。如何讓自己的內容在眾多平臺中脫穎而出&#xff0c;快速傳播并吸引大量觀眾&#xff0c;成為了每個創作者關注的焦點。近日&#xff0c;一款名為“迅狐視頻號矩陣系統”的神器震撼來襲&#xff0c;它以其…

UV膠,它是否有毒?如同那些隱藏在黑暗中的危險之物?

UV膠&#xff0c;它是否有毒&#xff1f;如同那些隱藏在黑暗中的危險之物&#xff1f; 關于uv膠的毒性問題&#xff0c;或許我們可以這樣深入探討。UV膠&#xff0c;如同一位戴著神秘面紗的訪客&#xff0c;在我們的生活中悄然出現&#xff0c;卻帶著諸多疑問。那么&#xff0…

二維碼生成需知:名片二維碼尺寸多少合適?電子名片二維碼制作方法?

隨著數字化時代的到來&#xff0c;二維碼在各個領域的應用越來越廣泛&#xff0c;名片作為商業交流的重要工具之一&#xff0c;也開始逐漸融入二維碼的元素。通過在名片上添加二維碼&#xff0c;我們可以輕松實現信息的快速傳遞和分享。然而&#xff0c;名片二維碼的尺寸選擇成…

Monorepo倉庫管理策略之 Lerna

這里寫目錄標題 前言&#xff1a;一、簡介二、新建項目使用安裝生成結構 三、復用現有項目執行命令查看包 四、配置package相互引用導入現有的包 五、發布包確定項目版本發布項目添加項目到到git發布包到NPM包發布出錯解決方案 五、實例代碼 前言&#xff1a; 將大型代碼倉庫分…

Python 與扣子 API的鏈接

當 Python 與各種 API 進行鏈接時&#xff0c;更是能碰撞出無數精彩的火花&#xff0c;為我們的開發工作帶來極大的便利和創新。今天&#xff0c;咱們就來聊聊 Python 與扣子 API 的鏈接那些事兒。 扣子 API 作為一種新興的技術接口&#xff0c;為我們提供了豐富的數據和功能。…

文心一言的流式接口數據進行處理 增加屬性

需求&#xff1a;需要對文心一言的流式接口數據進行處理 增加屬性 return ResponseEntity.ok().header("Access-Control-Allow-Origin", "*").contentType(org.springframework.http.MediaType.TEXT_EVENT_STREAM).cacheControl(org.springframework.http…

python調用串口收發數據

1、確認串口信息 2、安裝pyserial庫 打開終端或命令行&#xff0c;敲入這行命令&#xff1a;pip install pyserial 3、python編程 import serial def main(): #創建串口對象 ser serial.Serial(COM4, 9600, timeout1) if not ser.isOpen(): print("串…

飛睿智能6公里WiFi圖傳接收模塊,低延遲、抗干擾、高速穩定傳輸數據,無人機、農田遠距離WiFi模塊

在科技日新月異的今天&#xff0c;無線通信技術正以前所未有的速度發展&#xff0c;不僅改變了我們的生活方式&#xff0c;還為企業帶來了前所未有的商業機遇。今天&#xff0c;我要向大家介紹一款飛睿智能的產品——6公里WiFi圖傳接收模塊&#xff0c;它以其高性能、穩定的傳輸…