我负责开发一组C ++库和程序。 目前build立在Linux和MacOS上,但Windows支持也是一个要求。 我们将需要支持VS2010和VS2012,未来还将包括VS2013,也许还包括MinGW。 我们正在使用cmake进行构build,所以我们的代码应该在所有平台上构build而不出现问题。 我的问题是如何pipe理Windows上的所有依赖关系,以便能够首先构build并随时保持最新状态。 目前,我们每个视觉工作室版本都有一个虚拟机作为jenkins slave,所以所有变体的并行构build相当容易,但pipe理它却不是。
问题在于需要构build的变体的数量。 如果我们只考虑VS2010和VS2012,debugging/发布和i386 / x64构build,那么每个库已经有8个副本; 如果我们包含其他编译器,则为16。 我们将需要我们的代码所依赖的所有库,其中至less包括boost,qt,xerces + xalan,zlib,icu,libpng / tiff / jpeg,hdf5等,以及python及其所有依赖项。 随着新的上游版本的发布,我们需要保持整个集合的最新版本和所有构build/拱形/编译器变体的一致性。
我不想亲手做这个,因为这真的需要自动化。 但是,我不知道在Windows上做这个的好方法。 我在其他项目中看到的Windows构build指南通常涉及手动构build所有依赖关系,并且只为单个变体构build。 在Linux上,它已经被打包了,你不需要单独的debugging版本,拱形变体可以用chroot来满足; 在MacOS上有自制软件,macports等,而且在那里自动化的东西也相当简单。 有什么等效的Windows? 我曾经看过巧克力这样的东西,但是完全不适合处理图书馆,而且作为一个包pipe理者也相当差。
对于在Windows上进行C ++开发的人来说,这似乎是一个普遍的问题? 是否有任何常见的解决scheme,工具或方法来pipe理一套复杂的开发库和工具? 其他开发人员如何pipe理这个?
NB。 只是为了logging,我们没有使用Visual Studio应用程序; 我们通过直接使用cmake和/或msbuild驱动编译器的脚本,以非交互方式进行所有构build。
非常感谢,罗杰
我曾在大型Windows C ++项目上提供X86 Release,x86 Debug,x64 Release和x64 debug。 非常类似,我使用了构建系统,使用自定义脚本为所有目标平台进行并行构建。
我们管理组织好的文件夹中的所有第三方依赖库。 例如x86 \ release \ Zlib.dll x86 \ Debug \ zlib.dll x64 \ release \ zlib.dll x64 \ zlib.dll
自定义脚本可以从配置管理工具中选择所有这些库和项目源代码。 这允许根据需要自动构建相关的目标二进制文件。
任何第三方库更改都会在配置管理工具中更新,然后由脚本为下一个版本提取。
对于你在VS2010和2012支持的问题,我不明白重要性。 VS的版本是否足以支持该项目?
你可以看看http://www.gisinternals.com/sdk/ ,他们的构建系统https://github.com/gisinternals/buildsystem
它基本上是一组批处理文件,并且可以互相调用。 您仍然需要手动跟踪lib更新。