目前我正在使用Windows批处理文件来构建我的软件。它可以运行MSBuild,复制文件,创建ZIP文件,运行一些测试,包括颠覆版本号等。
但问题是,批处理文件是邪恶的。所以我想换个更好的东西。我打算用Python重新创建我的构建脚本。这是一个明智的选择吗?那些构建系统怎么样,比如Ant,SCons,Maven,Rake等。使用其中任何一个都是更好的选择吗?
注意:我不打算替换我的Visual Studio解决方案/项目文件。我只想编写创建软件版本所需的所有其他内容。
编辑:我有充分的理由离开批处理,这不是我的问题所在。我想知道(例如)SCons给我的东西,而不是普通的Python脚本。
答案 0 :(得分:16)
对于使用Python编写脚本的工具,我碰巧认为Paver是一个比SCons更容易管理且更灵活的构建自动机。与SCons不同,Paver专为管理和分发软件项目而进行的大量非编译程序任务而设计。
答案 1 :(得分:8)
批处理文件并不是邪恶的 - 它们实际上远离了command.com的脑死亡时代。现在,命令语言非常具有表现力,只需要你花一点力气去学习它。
除非您的构建脚本存在实际的问题,否则无法解决(如果是这样的话,那就是您应该问的问题,而不是一些愚蠢的问题“什么是最好的替换?“:-),我的方法是坚持你所拥有的。
模糊的邪恶感并不是我浪费精力'修复'未被打破的东西的理由。除非有明显的改变优势,否则这将是浪费的努力(“不那么邪恶”不是我认为明显的优势)。
答案 2 :(得分:6)
当你提到Python和SCons时,我会说去SCons。毕竟是Python。是的,上述任何一种都是比手动构建脚本更好的选择。
答案 3 :(得分:4)
我见过用于在其他地方构建版本的python脚本,所以它也不错。实际上,我个人使用perl脚本来自动发布版本。我想任何脚本语言都可以轻松地自动化该过程。如果它很容易做(并且可能比批处理脚本更好),为什么不尝试呢?
答案 4 :(得分:3)
我建议使用NAnt作为构建脚本而不是python。 我的理由是:
答案 5 :(得分:2)
为什么要使用python?如果您的构建脚本没有损坏,请不要修复它。如果您在更新它以处理项目的新请求时遇到问题,那么您可能希望重新编写它。虽然像NANT或MSBuild这样的工具可以完成这项任务,但我不会使用Python。我没有看到使用一般的purpis编程语言做一些已经编写过的工具的重点,除非你有很多现有工具无法处理的模糊要求。第二,如果你被公共汽车撞到或赢得乐透,会发生什么?如果您决定编写所有脚本,我会使用powershell或其他一些Microsoft特定技术,因为您已经与Microsoft结合了。如果你离开将有足够的Python程序员来维护构建脚本吗?
答案 6 :(得分:2)
我强烈建议您查看waf。这就是你想要的:“用于配置,编译和安装应用程序的基于Python的框架”
答案 7 :(得分:1)
就我个人而言,我会使用脚本作为最后的手段
但是,如果我不得不采用脚本编写方式,我会使用Powershell,原因如下:
答案 8 :(得分:1)
您可以为已安装的Microsoft nmake工具创建自定义makefile。使用像这样的工具(SCons,Maven等属于同一类别)比常规脚本更多。
主要好处是跟踪文件之间的依赖关系以及更改的时间戳。例如,您可以使.zip文件依赖于其他一些文件,因此.zip只会在其中一些文件发生变化的情况下重新打包。就像源代码及其编译形式一样。
答案 9 :(得分:1)
Python非常便携。 SCons经过现场测试且可靠。鉴于你所知道的(根据你的解释),为什么甚至会问这个问题?
如果您维护某些东西,不仅仅是为了构建它,还要向用户解释为什么它无法构建,这可以帮助用户自助,从而为您节省大量非常令人沮丧的问题。
我想不出一个缺乏Python的现代生产操作系统,除非你进入嵌入式/研究领域。
所以,我回答说,你回答了自己的问题:)
答案 10 :(得分:0)
这取决于您的软件使用的技术。如果你正在构建C ++程序,我可能会说没问题就去scons(除非你有scons无法满足的奇怪要求)。另一方面,请考虑构建C#的说明:CSharpBuilder。
我想知道(例如)SCons给我的东西,而不是普通的Python脚本。
将scons视为一个库而不是一个程序。它为您提供了代码,可以防止您在没有它的情况下处理大量繁琐的事情。在我看来,对于任何类型的shell脚本来说,vanilla Python都不是最好的选择(不是它不能这样做)。
但问题是,批处理文件是邪恶的。
最后,批处理文件如果用于他们不适合处理的项目则是邪恶的。对于一个或两个文件项目,批处理文件就可以了。
答案 11 :(得分:0)
它可以运行MSBuild,复制文件,创建ZIP文件,运行一些测试,包括颠覆版本号等。
MSBuild和PowerShell可以通过相当简洁的简洁代码轻松完成所有这些工作。然后你就会坚持使用经理们喜欢的纯M $产品。否则我建议你不要只考虑其大型社区就可以看看Rake。它有一个很好的语法和铁红宝石支持(irake)。
说实话,除了您提到的最后一项任务外, 轻松 仅在MSBuild中完成。我建议你去其他地方之前先学习一下这些工具。
查看http://msbuildtasks.tigris.org/以了解MSBuild
的一些优点