【问题标题】:Embedding SVN Revision number at compile time in a Windows app在 Windows 应用程序的编译时嵌入 SVN 修订号
【发布时间】:2010-09-14 03:47:13
【问题描述】:

我希望我的 .exe 能够使用我的 svn 版本访问资源字符串。我可以手动输入,但我更喜欢在编译时自动嵌入。 Visual Studio 2008 有这样的功能吗?

【问题讨论】:

    标签: c++ windows visual-studio svn


    【解决方案1】:

    如何使用SubWCRev 附带的命令行工具TortoiseSVN。您创建一个模板文件,其中包含 $WCREV$ $WCDATE$ 等标记。然后有一个预构建步骤,在您的模板文件上运行 SubWCRev 以创建馈送到编译器的实际源文件。

    【讨论】:

      【解决方案2】:

      我想要类似的可用性,但发现 $Rev$ 是不够的,因为它仅在文件的修订版本发生更改时才针对文件进行更新(这意味着必须非常及时地对其进行编辑和提交:这不是我想做的事情.) 相反,我想要一些基于存储库修订号的东西。

      对于我现在正在进行的项目,我编写了一个 Perl 脚本,该脚本从我的工作副本的最顶层目录运行 svnversion -n 并将最新的修订信息输出到一个 .h 文件(我实际上比较了它到我的工作副本中的非版本控制文件中保存的版本,这样我就不会在每次编译时覆盖当前的修订信息,但您是否选择这样做取决于您。)这个 .h 文件(或许多文件如有必要,取决于您的方法)在我的应用程序代码和资源文件中都被引用以获取我想要的信息。

      此脚本作为预构建步骤运行,以便在构建开始之前一切都是最新的,并且您的构建工具会自动重新构建适当的文件。

      【讨论】:

      • TortoiseSVN 有一个名为 SubWCRev.exe 的小助手实用程序,它可以找到工作副本的最高提交修订号。
      • 很高兴知道!我的团队经常使用 TortoiseSVN,所以在我编写脚本时了解帮助程序可能会很好。我可能会在某个时候查看 SubWCRev.exe - 放弃对正常 Subversion 发行版的依赖可能会很好......
      • 给其他人实施这个想法的一个提示:考虑让你的脚本写出一个新版本,只有在本地实际进行了更改时;即仅当svnversion 输出的值在最后一组字符中包含“M”时。这将允许您在提交后重建您的项目,而无需更改版本号。 (有关其输出格式的说明,请参阅the svnversion documentation。)
      • @SimonSouth 我们实际上做了类似的事情,所以当我们遇到修改过的、未版本化的构建时会告诉我们,因为我们在这些构建中包含了 M。
      • 提交更改后存储库修订号是否会更改?
      【解决方案3】:

      antik 的解决方案是我们使用的解决方案。小心使用环境变量,.h 文件确保您可以拥有一个依赖项,这将导致任何需要它的文件在 svn rev 号更改时重新编译。

      【讨论】:

      • 好点:我忘了这是我们环境中的另一个好处。
      【解决方案4】:

      看看 svn 关键字替换here。我通过google找到了另一个SO问题here

      【讨论】:

        【解决方案5】:

        您可以联系SVN to embed it for you,如果这样可以解决问题。请参阅该页面上的 $Rev$ 关键字。

        【讨论】:

        • 不幸的是,$Rev$ 关键字只给出了它所在的文件被更改的最后一个版本。
        猜你喜欢
        • 2011-05-29
        • 2010-11-29
        • 1970-01-01
        • 1970-01-01
        • 2011-03-04
        • 1970-01-01
        • 2014-04-09
        • 1970-01-01
        • 2012-11-29
        相关资源
        最近更新 更多