1

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

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

2.0

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

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

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

现在对于 Windows,我有一个.sln包含不同.vcxproj文件的文件,我想做类似的事情,除了我不知道怎么做。

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


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

4

2 回答 2

1

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

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

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

在 Visual Studio 中,为 Version.h 创建一个自定义构建步骤,并使其依赖于强制它在每次构建时更新的东西。

于 2014-05-03T13:08:48.173 回答
0

您可以维护当前解决方案,对于 Windows,将其与 SCons 使用MSVSProject()构建器或MSVSSolution()构建器生成的 Visual Studio 解决方案和项目文件集成。

您可以在此处找到有关这些 SCons 构建器的更多信息。

于 2014-05-03T19:53:59.347 回答