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

时间:2014-05-03 12:53:34

标签: c++ visual-studio visual-studio-2013 scons buildconfiguration

我有一个基于多个平台构建的C ++项目。

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

2.0

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

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

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

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

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


我知道我也可以在Windows上使用SCons,但我不喜欢(主要是因为它在平台上看起来不太受欢迎,而且我不想吓唬那些只知道Windows的潜在贡献者 - 具体工具)。

2 个答案:

答案 0 :(得分:1)

执行此操作的常用方法是在包含文件中定义常量: e.g。

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

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

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

答案 1 :(得分:0)

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

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