Nor*_*ros 1 c++ windows visual-studio
经过大量搜索后,我找到了一个用于跟踪和增加项目构建编号的工具。对于 C/C++ 项目。所有其他的要么已经过时,要么适用于 C#。
我正在使用此博客中的 IncrementBuild-*.exe:http://alax.info/blog/1713
它按预期工作,但我相信我做错了什么,因为在运行此工具后构建后,它出于某种原因添加了另一个 VERSIONINFO 资源。该项目最终有 2 种资源,原始资源和修补后的资源。
没有源代码或 .pdb 来修改/重制/分析它。
有没有人有比这更好的解决方案?
请指教,不胜感激。
有没有人有比这更好的解决方案?
更好,我不知道,不同的是。
实际上并不需要第三方工具。我们使用一个简单的脚本来执行此操作,并且从我记事起它就一直在运行(我认为是关于 Visual Studio 2010,从那时起进行了一些更改)。但是,您需要满足一些先决条件(但这可以派上用场)。以下脚本应在 Visual Studio 2019/2017 和 PowerShell 3+ 中运行。
version.h我们有一个如下所示的文件:
#pragma once
#define VERSION_MAJOR 1
#define VERSION_MINOR 0
#define VERSION_PATCH 0
#define VERSION_BUILD 0
#define stringify(a) stringify_(a)
#define stringify_(a) #a
Run Code Online (Sandbox Code Playgroud)
注意:version.h 需要在末尾换行以避免fatal error RC1004: unexpected end of file found.
资源文件可以包含头文件,因此包含version.h在资源文件中并将其更改为相应地使用定义:
#include "version.h"
// ... other stuff
VS_VERSION_INFO VERSIONINFO
FILEVERSION VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH, VERSION_BUILD
PRODUCTVERSION VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH, VERSION_BUILD
// ... other stuff
VALUE "FileVersion", stringify(VERSION_MAJOR) "." stringify(VERSION_MINOR) "." stringify(VERSION_PATCH) "." stringify(VERSION_BUILD)
VALUE "ProductVersion", stringify(VERSION_MAJOR) "." stringify(VERSION_MINOR) "." stringify(VERSION_PATCH) "." stringify(VERSION_BUILD)
// ... other stuff
Run Code Online (Sandbox Code Playgroud)
现在,在项目属性预构建脚本中,我们正在运行 PowerShell 脚本。命令:
powershell.exe -ExecutionPolicy Bypass -NoProfile -NonInteractive -File update_version.ps1 "./version.h"
Run Code Online (Sandbox Code Playgroud)
该脚本是一个带有增量的查找和替换文本:
(Get-Content -path $args[0] -Raw) |
ForEach-Object {
$defstr="#define VERSION_BUILD ";
$regex="$defstr(?<BuildVersion>\d*)";
if($_ -match $regex) {
$_ = $_ -replace $regex,"$($defstr)$(([int]$matches["BuildVersion"])+1)"
}
$_
} |
Out-File $args[0] -encoding ascii -nonewline
Run Code Online (Sandbox Code Playgroud)
一些优点是:
version.h是纯 C 语言,可以由任何 C/C++ 兼容编译器、MSVC 资源编译器甚至 Doxygen 等工具进行解析。#include "version.h"
int main() {
std::cout << "Hello World Version " stringify(VERSION_MAJOR) "." stringify(VERSION_MINOR) "." stringify(VERSION_PATCH) "." stringify(VERSION_BUILD) " !\n";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3762 次 |
| 最近记录: |