在Makefile动态生成程序svn版本号的方法

合集下载

SVN、GIT生成版本号迟思堂工作室

SVN、GIT生成版本号迟思堂工作室

SVN、GIT生成版本号迟思堂工作室
GIT生成编译版本号脚本:
方法:
GIT的版本号是一个 40 位的 SHA-1 的哈希值,但我们不使用这个值作为版本号,r16比d51f6f0b5eb202bbe6204246187d35df43aa6ef8更容易看一些。

我们先使用git rev-list HEAD命令打印所有GIT版本,再通过wc计数,得到的数字就是我们想要的版本号(万一版本号有10000个,不知道这样做好不好)。

另外,我们在数字的版本号后面加上哈希值的前7位,这使得数字的版本号和哈希值的版本号对应起来。

生成的文件示例:
补记:可以在版本号添加分支名称,语句如下:
另一个较复杂的GIT生成编译版本号脚本:
这个脚本需要join命令的支持,在windows上join.exe命令需要msys-iconv-2.dll、msys-intl-8.dll动态库的支持。

如果安装了MinGW,可以从安装目录中直接获取。

cmake configure生成makefile用法

cmake configure生成makefile用法

CMake是一个开源的、跨平台的自动化构建工具,它可以生成标准的makefile文件,使得用户可以通过make命令来编译源代码。

下面是一个简单的示例,演示如何使用CMake生成makefile文件。

1.创建一个CMakeLists.txt文件
在源代码的根目录下创建一个CMakeLists.txt文件,这个文件用于描述如何构建你的项目。

在CMakeLists.txt文件中,你需要指定要构建的目标、依赖项和构建规则。

下面是一个简单的CMakeLists.txt文件示例:
在这个示例中,我们指定了要构建一个名为my_program的可执行目标,并指定了该目标的源代码文件为main.cpp。

1.生成makefile文件
在源代码的根目录下打开终端,并进入CMakeLists.txt所在的目录。

然后运行以下命令:
这个命令会在build目录下生成makefile文件,并使用make命令编译源代码。

如果编译成功,你将在build目录下看到可执行文件。

1.自定义构建规则
在CMakeLists.txt文件中,你可以使用各种CMake命令来定义构建规则。

例如,你可以使用add_library 命令来添加静态库或动态库目标,使用add_custom_command命令来添加自定义构建规则等等。

下面是一个更复杂的CMakeLists.txt文件示例:
在这个示例中,我们添加了一个名为my_library的静态库目标,并添加了一个名为my_program的可执行目标。

我们还添加了一个自定义构建规则,该规则指定了my_program目标依赖于my_library 目标。

cmake编译debug版本

cmake编译debug版本

cmake编译debug版本CMake是一个跨平台的编译管理工具,可以用来自动生成makefile,从而简化编译过程。

在进行软件开发和调试时,往往需要分别编译debug和release版本。

本文将围绕如何用CMake编译debug 版本进行详细阐述,帮助读者了解编译debug版本的流程和技巧。

第一步,新建一个文件夹,比如“build-debug”,作为编译输出目录。

进入该目录。

第二步,打开CMakeLists.txt,并添加以下代码:```set(CMAKE_BUILD_TYPE Debug)```这行代码的作用是设置编译器的选项,使其生成debug版本的可执行文件。

如果不进行设置,默认情况下,CMake会生成release版本的可执行文件。

第三步,运行以下命令:```cmake ..```这个命令的作用是生成Makefile文件。

需要注意的是,需要在刚刚创建的“build-debug”目录下执行该命令,而不是在源代码目录下执行。

执行该命令后,CMake会根据CMakeLists.txt中的配置生成Makefile文件,用于编译可执行文件。

如果有错误信息,则需要根据提示修复问题。

第四步,输入以下命令:```make```该命令的作用是根据Makefile文件编译可执行文件。

因为我们已经在CMakeLists.txt中设置了编译选项,因此使用这个命令默认会生成debug版本的可执行文件。

Makefile会将源代码编译成目标文件,最终生成可执行文件。

第五步,运行可执行文件进行调试。

在命令行中输入可执行文件的名称,即可启动程序。

由于我们生成的是debug版本的可执行文件,因此可以在运行时使用调试器进行调试。

例如,可以在GDB中通过命令行设置断点,检查变量的值等,以帮助定位代码问题。

总之,使用CMake编译debug版本的流程和编译release版本基本相同,只需要在CMakeLists.txt文件中设置编译选项,并且使用合适的命令进行编译即可。

makefile基本使用方法

makefile基本使用方法

makefile基本使用方法makefile是一种用来管理和自动化构建程序的工具。

它可以根据源代码文件的依赖关系和编译规则来自动构建目标文件和可执行文件。

makefile的基本使用方法如下:1. 创建makefile文件:在项目的根目录下创建一个名为makefile 的文件。

2. 定义变量:在makefile中,可以使用变量来存储一些常用的参数和路径,以便于后续的使用。

例如,可以定义一个名为CC的变量来指定编译器的名称,如:CC=gcc。

3. 编写规则:在makefile中,可以使用规则来指定如何编译源代码文件和生成目标文件。

一个规则由两部分组成:目标和依赖。

目标是要生成的文件,依赖是生成目标文件所需要的源代码文件。

例如,可以编写以下规则:```target: dependency1 dependency2command1command2```其中,target是目标文件,dependency1和dependency2是依赖的源代码文件,command1和command2是生成目标文件所需要执行的命令。

4. 编写默认规则:在makefile中,可以使用一个默认规则来指定如何生成最终的可执行文件。

默认规则的目标通常是可执行文件,依赖是所有的源代码文件。

例如,可以编写以下默认规则:```all: target1 target2```其中,target1和target2是生成的目标文件。

5. 编写clean规则:在makefile中,可以使用clean规则来清理生成的目标文件和可执行文件。

例如,可以编写以下clean规则: ```clean:rm -f target1 target2```其中,target1和target2是要清理的目标文件。

6. 运行make命令:在命令行中,使用make命令来执行makefile 文件。

make命令会自动根据规则和依赖关系来编译源代码文件和生成目标文件。

例如,可以运行以下命令:``````make命令会根据makefile文件中的规则和依赖关系来编译源代码文件并生成目标文件和可执行文件。

CMake生成版本号

CMake生成版本号

CMake生成版本号CMake生成版本号(金庆的专栏)原来的CMake需要用shell脚本生成SVN版本号,再作为cmake参数传入。

CMake调用脚本示例:#!/bin/sh# cmake.shServerCodeRoot=~/Code/Server CodeRevNum=`svn info ${ServerCodeRoot} | grep Revision | awk -F' ' '{ print $2 }'`cmake S{ServerCodeRoot}-DCMAKE_BUILD_TYPE=Release-DVERSION_REVISION=S{CodeRevNum}CMakeLists.txt 中如下配置:configure_file("Version.h.in""Version.h")Version.h.in如下:#include <string>const std::string VERSION_MAJOY("1");const std::string VERSION_MINOR("0");const std::stringVERSION_REVISION("@VERSION_REVISION@");Linux 下执行cmake.sh会自动替换SVN版本号。

现改为用FIND_PACKAGE(Subversion)方式,不必用shell脚本生成SVN版本号,并且在Windows上也可以生成版本号, cmake调用时不必传VERSION_REVISION参数。

CMakeLists.txt改为(参考了开源网游ryzom的CMake):SET(ROOT_DIR ${PROJECT_SOURCE_DIR})IF(EXISTS "${ROOT_DIR}/.svn/")FIND_PACKAGE(Subversion)IF(SUBVERSION_FOUND)Subversion_WC_INFO(${ROOT_DIR} Project)SET(VERSION_REVISION${Project_WC_REVISION})ENDIF(SUBVERSION_FOUND)ENDIF(EXISTS "${ROOT_DIR}/.svn/")CONFIGURE_FILE( "Version.h.in""Version.h")如果不是SVN, 而是用Hg, 可用如下脚本:IF(EXISTS "${ROOT_DIR}/.hg/")FIND_PACKAGE(Mercurial) IF(MERCURIAL_FOUND) Mercurial_WC_INFO(${ROOT_DIR} ER)SET(REVISION ${ER_WC_REVISION})SET(CHANGESET ${ER_WC_CHANGESET})SET(BRANCH ${ER_WC_BRANCH})ENDIF(MERCURIAL_FOUND) ENDIF(EXISTS "${ROOT_DIR}/.hg/")。

svn版本号设置规则

svn版本号设置规则

svn版本号设置规则SVN是一种版本控制系统,它可以帮助开发人员管理代码的版本和变更历史。

在使用SVN时,版本号是非常重要的,因为它可以帮助开发人员跟踪代码的变化和历史。

下面是SVN版本号设置的规则。

SVN版本号由两部分组成:主版本号和次版本号。

主版本号是一个整数,表示代码的主要版本。

次版本号是一个整数,表示代码的次要版本。

例如,版本号1.2表示主版本号为1,次版本号为2。

SVN版本号的设置规则如下:1. 主版本号的设置规则主版本号是一个整数,它表示代码的主要版本。

主版本号的设置规则如下:- 当代码的功能发生重大变化时,主版本号加1。

例如,从版本1.0到版本2.0,表示代码的功能发生了重大变化。

- 当代码的兼容性发生重大变化时,主版本号加1。

例如,从版本1.0到版本2.0,表示代码的兼容性发生了重大变化。

- 当代码的架构发生重大变化时,主版本号加1。

例如,从版本1.0到版本2.0,表示代码的架构发生了重大变化。

2. 次版本号的设置规则次版本号是一个整数,它表示代码的次要版本。

次版本号的设置规则如下:- 当代码的功能发生小的变化时,次版本号加1。

例如,从版本1.1到版本1.2,表示代码的功能发生了小的变化。

- 当代码的兼容性发生小的变化时,次版本号加1。

例如,从版本1.1到版本1.2,表示代码的兼容性发生了小的变化。

- 当代码的修复bug时,次版本号加1。

例如,从版本1.1到版本1.2,表示代码修复了一些bug。

SVN版本号的设置规则可以帮助开发人员更好地管理代码的版本和变更历史。

在使用SVN时,开发人员应该根据代码的变化情况来设置版本号,以便更好地跟踪代码的变化和历史。

同时,开发人员还应该注意版本号的唯一性,避免出现重复的版本号。

总之,SVN版本号的设置规则是非常重要的,它可以帮助开发人员更好地管理代码的版本和变更历史。

在使用SVN时,开发人员应该遵循版本号的设置规则,以便更好地跟踪代码的变化和历史。

版本生成算法

版本生成算法版本生成算法通常用于在软件开发中管理和生成版本号。

版本号是一个标识软件发布的字符串,通常包含主版本号、次版本号、修订号等。

版本生成算法的设计取决于团队或组织的需求,但有一些通用的做法。

下面是一个简单的版本生成算法的示例:1. 主版本号(Major):表示重大变更或破坏性更新。

当进行不兼容的API 变更或重大结构改变时递增。

2. 次版本号(Minor):表示向后兼容的新功能。

当引入新功能而不破坏现有功能时递增。

3. 修订号(Patch):表示向后兼容的问题修复。

当修复了现有功能中的缺陷时递增。

4. 预发布号(Pre-release):表示该版本处于测试或预览阶段。

可以是alpha、beta、rc(Release Candidate)等。

例如,1.0.0-alpha.1。

5. 构建号(Build):表示具体构建的标识,通常是自动生成的,用于唯一标识每个构建版本。

一个简单的版本号可能如下:```Major.Minor.Patch-PreRelease.Build```具体生成算法的示例可能如下(这只是其中一种方式):```pythonclass VersionGenerator:def __init__(self, major, minor, patch, pre_release=None, build=None):self.major = majorself.minor = minorself.patch = patchself.pre_release = pre_releaseself.build = builddef generate_version(self):version = f"{self.major}.{self.minor}.{self.patch}"if self.pre_release:version += f"-{self.pre_release}"if self.build:version += f"+{self.build}"return version# 示例用法version_generator = VersionGenerator(major=1, minor=2, patch=3, pre_release="alpha", build="123")version = version_generator.generate_version()print(version)```这只是一个简单的示例,实际的版本号生成算法可能会更加复杂,具体取决于项目的需求和规范。

svn版本号设置规则

svn版本号设置规则1. 什么是svn版本号2. svn版本号的格式### 2.1 主版本号### 2.2 次版本号### 2.3 修订号### 2.4 编译号3. svn版本号的设置规则### 3.1 增加主版本号1. 标识大的项目重构或重建2. 表示项目的重大里程碑### 3.2 增加次版本号1. 表示添加了新的功能2. 表示对现有功能的较大改进### 3.3 增加修订号1. 表示对现有功能的一些小改动2. 表示错误修复### 3.4 增加编译号1. 标识重新编译生成的版本2. 表示内部版本的修复或改进4. svn版本号的使用场景5. svn版本号的注意事项### 5.1 遵循版本号规则### 5.2 版本号的命名清晰明了### 5.3 版本号的记录和管理### 5.4 版本号的发布和回滚6. 总结1. 什么是svn版本号在软件开发过程中,版本号是用于标识软件、代码或文档的不同版本的一种标识。

版本号的设置有助于团队成员之间的沟通和协作,能够清晰地追踪和管理软件的变更。

svn(Subversion)是一种开源的版本控制系统,用于管理文件和目录的变更历史,并协助多人开发项目的版本控制。

svn版本号就是svn系统为每次提交的变更记录所分配的唯一标识符。

2. svn版本号的格式svn版本号由四个部分组成:主版本号、次版本号、修订号和编译号。

每个部分是一个非负整数,通过”.”分隔。

2.1 主版本号主版本号用于表示软件或项目的重大版本变化,一般在项目的重构或重建时增加主版本号。

主版本号的变更表明发生了不兼容的API修改或重大的功能更新。

2.2 次版本号次版本号用于表示软件或项目的功能增加或相对较大的功能改进。

当向软件中添加新的功能或对现有功能进行较大改进时,次版本号应该被增加。

2.3 修订号修订号用于表示对现有功能进行小改动或错误修复。

每次修订号的增加都应该对应着用户能够感知到的一些变化。

修订号的变更不应该引入新的功能或破坏现有的功能。

sv 中的makefile 写法

SV(SystemVerilog)是一种硬件描述语言,用于设计和验证数字电路。

在进行SV代码编写的过程中,makefile是一种非常有用的工具,可以帮助组织和管理SV项目中的代码文件。

本文将介绍SV中makefile的写法,希望能为SV开发者提供一些参考和帮助。

1. 为什么需要makefile在SV项目中,通常会涉及到多个源文件、库文件、测试文件等。

使用makefile可以帮助我们轻松地组织和管理这些文件,实现自动化编译、信息和运行测试的功能。

makefile还可以帮助我们避免重复编译文件,提高开发效率。

2. makefile的基本结构makefile由一系列规则组成,每个规则由一个目标、依赖列表和命令组成。

一个基本的makefile看起来像这样:```makefiletarget: dependenciesmand```其中,target表示规则的目标文件,dependencies表示该目标文件的依赖文件mand表示需要执行的命令。

3. 使用变量在makefile中,我们可以使用变量来定义一些常量,方便我们在后续的规则中使用。

例如:```makefileSV_SRC = file1.sv file2.sv file3.sv```这样,我们就可以在后续的规则中使用$(SV_SRC)来表示这些文件,而不需要重复地写出它们的文件名。

4. 基本规则在SV项目中,常见的makefile规则包括编译规则、信息规则和运行测试规则。

以下是一个简单的例子:```makefileall: $(SV_SRC)vlog $(SV_SRC)sim: allvsim top_module```在这个例子中,我们定义了两个规则,分别是all和sim。

all规则依赖于$(SV_SRC)中的文件,使用vlog命令对这些文件进行编译。

sim规则依赖于all规则,使用vsim命令来运行测试。

5. 使用通配符在makefile中,我们还可以使用通配符来表示一类文件。

第二课-GCC、GDB、Makefile、SVN


第二课:VIM,GCC,GDB,Makefile,SVN,Eclipse
二,GCC使用-选项
-E :预处理后即停止,不进行编译.预处理后的代码送往标 准输出. 同样可以以下面的程序为例: 如test1.c #include <stdio.h> main(int argc, char **argv) { printf("This is a test\n"); #ifdef DEBUG printf("DEBUG is defined"); #endif return 0; } 执行如下语句: gcc –E test.c 它在标准输出中显示的结果代码里已去掉了预处理 部分的代码
课程内容
VIM编辑器 GCC使用 GDB的使用 Makefile编写 版本管理工具:SVN 附课:Eclipse开发环境
本课包含一个建议任务的列表和一组测试题.
第二课:VIM,GCC,GDB,Makefile,SVN,Eclipse
一,VIM编辑器
概述:代码编辑工具VIM 课程:启动VIM 插入文本 光标移动 删除字符 撤销和重做 查找和替换 编辑多个文件 退出和帮助
LINUX环境编程-第二课
VIM,SVN,GCC, GDB, , , , , Makefile
课程目标
掌握文本代码编辑工具VIM . 掌握软件版本管理工具SVN. 掌握编译工具GCC. 了解Makefile编写. 熟练GDB调试工具 .
第二课:VIM,GCC,GDB,Makefile,SVN,Eclipse
第二课:VIM,GCC,GDB,Makefile,SVN,Eclipse
二,GCC使用-链接选项
-static :在支持动态连接(dynamic linking)的系统上,阻止连接 共享库.该选项在其他系统上无效. 同样对于test3.c,大家执行gcc test3.c -lm -o test3之后,可以 使用"ldd test3"指令查看它依赖于哪些动态库: libm.so.6 => /lib/tls/libm.so.6 (0x00475000) libc.so.6 => /lib/tls/libc.so.6 (0x0033e000) /lib/ld-linux.so.2 (0x00324000) 如果我们使用-static选项: gcc -static test3.c -o test3s 然后我们使用ldd指令查看,会看到它的提示如下: not a dynamic executable -shared:生成一个共享目标文件,他可以和其他目标文件连 接产生可执行文件.只有部分系统支持该选项.
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在Makefile动态生成程序版本号的方法 .
01.GET_SVN_VERSION_CMD = LANG=C;LC_ALL=C;export LC_ALL;svn info | grep "Last Changed Rev: " | sed -e "s/Last Changed Rev: "//g
02.$(appName) : $(ALLDEPOBJS)
03.force:
04.svn_version.cpp: force
05.@$(SHELL) -ec 'echo "int
g_nSvnVersion="`$(GET_SVN_VERSION_CMD)`";" > ./svn_version.cpp'
在Makefile加入以上代码,并将svn_version.o放在$(ALLDEPOBJS)一起编译即可在源文件中通过extern int g_nSvnVersion;得到svn的版本号。

二,动态生成发布版本号/操作系统名称/发布日期的方法:
1,在命令行执行export
RELEASE_VERSION_FLAGS="-DRELEASEVERSION=///"1.0.3///"
-DBUILDOS=///"`uname`///" -DBUILDDATE=///"`date +%y%m%d`///"",更方便的,可以将该命令保存到.bashrc环境变量文件里面
2,在Makefile加入$(RELEASE_VERSION_FLAGS) 参数编译
3,在源文件中通过以下方法获取版本号:
01.std::string strReleaseVersion = "1.0.2";
02.#ifdef RELEASEVERSION
03.strReleaseVersion = RELEASEVERSION;
04.#endif
4,在源文件中通过以下方法获取操作系统名称:
01.std::string strBuildOS = "Linux";
02.#ifdef BUILDOS
03.strBuildOS = BUILDOS;
04.#endif
5,在源文件中通过以下方法获取发布日期:
01.std::string strBuildDate = "110501";
02.#ifdef BUILDDATE
03.strBuildOS = BUILDDATE;
04.#endif。

相关文档
最新文档