gpt4 book ai didi

c++ - 如何为 Visual Studio 创建动态定义?

转载 作者:太空宇宙 更新时间:2023-11-04 11:34:16 26 4
gpt4 key购买 nike

我有一个构建在多个平台上的 C++ 项目。

在 Mac OSX 和 Linux 上,我使用 SConstruct,这让我对不同的编译步骤有了一些“智能”。也就是说,我可以将程序版本放在存储库根目录下名为 VERSION 的文件中,其内容很简单:

2.0

在构建 SConscript 中,我只需要打开、读取和解析该文件,我就可以基于它创建动态定义。例如:

env.Append(CXXFLAGS=['-DVERSION_MAJOR=%s' % open('VERSION').read().split('.')[0]])

由于显而易见的原因,这非常方便。例如,它还允许我将今天的日期放入环境变量中。

现在对于 Windows,我有一个包含不同 .vcxproj 文件的 .sln 文件,我想在其中执行类似的操作,但我不知道如何操作。

总而言之,我的问题是:我怎样才能拥有这样的“智能”定义(读取、解析文件并将其内容放入多个环境变量中)而不必更改 .sln/.vcxproj 在每个版本转换时手动文件?


我知道我也可以在 Windows 上使用 SCons,但我不想这样做(主要是因为它在该平台上似乎不太受欢迎,而且我不想吓到只知道 Windows 特定工具的潜在贡献者)。

最佳答案

一个常用的方法是在包含文件中定义常量:例如

// Version.h - Autogenerated, don't edit
#define VERSION_MAJOR 1

接下来您编写一个脚本或程序(用您喜欢的语言)从某处获取版本并动态编写 Version.h。可能解析旧的 Version.h 并递增或从某些外部源获取它。

在 visual studio 中,为 Version.h 创建自定义构建步骤,并使其依赖于强制它在每次构建时更新的内容。

关于c++ - 如何为 Visual Studio 创建动态定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23444686/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com