我有一个基于多个平台构建的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的潜在贡献者 - 具体工具)。
答案 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的更多信息。