开源 Visual Studio 项目分发噩梦
Posted
技术标签:
【中文标题】开源 Visual Studio 项目分发噩梦【英文标题】:Open source Visual Studio project distribution nightmare 【发布时间】:2009-04-03 15:39:36 【问题描述】:每次 Microsoft 发布新版本的 Visual Studio 时,他们总是要求我将我的解决方案和项目文件转换为“最新版本”。即使使用像“Hello World”这样简单的解决方案,我也需要通过他们的转换向导!
而且,更糟糕的是,新的 Visual Studio 解决方案文件与旧版本的 Visual Studio 不兼容。
对于任何与一群人一起工作的人......或任何希望为他们的项目分发源代码的人来说,这真是一场噩梦。
有没有什么好的方法可以分发 Visual Studio 项目,并允许使用旧版本 Visual Studio 的人仍然使用它?这是一个简单的 C 程序,没有使用任何漂亮的选项。我只能访问 Visual Studio 2008,而 Visual Studio 不提供向后“转换”向导。使用 nmake+makefile 发布源代码来构建程序是否有意义?似乎 nmake 文件格式在一段时间内没有发生显着变化,并且可以提供适用于更广泛版本的 Visual Studio 的 makefile。
【问题讨论】:
【参考方案1】:执行此操作的正常方法是将 vs 项目文件放在解决方案的子目录中。比如
solution
- build
-- vc6
-- vc7
-- vc8
-project1
-- src
-- build
--- vc6
--- vc7
--- vc8
-project2
-- src
-- build
--- vc6
--- vc7
--- vc8
那么当你得到一个新版本的 vs - 复制最后一个项目目录,例如 vc7 到 vc8 - 对解决方案做同样的事情 - 在文本编辑器中打开解决方案和项目文件以修复任何路径 - 最后在新版本的vs中打开解决方案,让它转换你的项目 - (使用源代码控制,好像一个或您的路径错误,它会更新旧目录中的项目)
这很烦人,但您只需每隔几年做一次。
这就是我们过去的做法,但是有一个更好的方法,那就是使用CMake 来生成您的项目。我们现在在工作中使用它,它允许使用单个项目定义在 Windows 和 unix 上本地工作。在 windows 上,我们使用 vs 项目,在 unix 上,我们使用 eclipse 和 makefile。此外,CMake 允许您抽象通用项目设置,如编译器和链接器标志,因此只需在一处修改它们。
无论我是否需要它的多平台功能,我现在都将 CMake 用于所有 c++ 项目。
【讨论】:
【参考方案2】:您可以使用CMake 作为您项目的构建工具。它将为您生成 VS 项目文件,您只需打开文件并使用它来构建项目。转换问题无关紧要,因为您可以使用 CMake 重新构建它。
在这种情况下,CMake 的优势在于可移植性和版本独立性(还有跨平台构建能力,但这可能不相关)。然而,CMake 确实有一些学习曲线,它并不像使用项目文件那么简单,但它确实解决了您遇到的问题。由于您的项目相对简单,因此它可能是您的解决方案。
【讨论】:
【参考方案3】:没有简单的答案。不过,我希望我们做到了。从 2005 年开始,您还需要打包一个 redist 包或与运行时进行静态链接,这种情况只会变得更糟。如果你有一个 2008 年的静态链接二进制文件与更早的一代(早于 2005 年)应用程序对话,我不知道它会做什么。根据 MS 的说法,这应该可行。
您可以放心地假设您的所有用户都将拥有 Visual Studio 的副本吗?他们都运行相同的版本吗? (我知道,现在速成版是免费的......)如果您继续走这条路,并让他们都使用相同版本的 VS2008,那么您将需要对您的用户群进行困难的教育,以使周围的每个人的生活更轻松。
不过,我宁愿使用 make/gcc,也不愿绕着公园转。
【讨论】:
是的,我想我会发布源代码和生成文件,因为很难保证 1) 正在使用正确版本的 VS 以及 2) 他们有 VS。另外,实际的编译器是免费的,nmake 工具也是免费的。【参考方案4】:我认为使用 nmake 是可行的方法 - 不幸的是,VC6 是最后一个可以根据项目自动为您创建的版本。
但是,你说你的项目很简单,所以这应该不是主要障碍。
【讨论】:
【参考方案5】:我建议您使用开源流程。将您的代码发布为 VS 2008,并允许使用早期版本的人为这些版本贡献解决方案文件。这就是开源方式。
【讨论】:
【参考方案6】:我见过商业 Windows 库使用的一个解决方案是使用 VS 版本作为后缀命名解决方案文件(例如:Project_VS2005.sln、Project_VS2008.sln 等)。您仍然必须使它们保持同步,但您不必更改文件路径,或包含目录,或修改实际的解决方案文件;只需保留多个文件,每个支持的 VS 版本一个。您必须对项目文件做同样的事情,但至少您不必更改内容以支持不同的目录结构,除非您想支持与多个 VS 版本并排构建,并且在这种情况下您只需要更改每个不同项目文件的输出设置。
并不是说这是一个很好的解决方案,而只是另一种选择。
【讨论】:
以上是关于开源 Visual Studio 项目分发噩梦的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Studio 中制作可分发的 C++ 程序
无法使用 Visual Studio 分发功能注册我的 Xamarin 表单应用程序
从linux交叉编译到windows一个visual studio项目
如何选择/设置要用于 Visual Studio App Center 项目的图像?