【问题标题】:Passing a build number to msbuild (c++ project)将内部版本号传递给 msbuild(C++ 项目)
【发布时间】:2014-02-24 23:21:27
【问题描述】:

我一直在尝试通过 msbuild 将构建 ID(和日期)传递给我的 c++ 项目,这样从 Jenkins 创建的每个构建最终都会有一个构建号和日期,可以从我程序中的面板访问.

从表面上看,这似乎是一件容易的事。只需创建一个常量定义,由 msbuild 重新定义为当前日期和内部版本号。

我正在尝试使用这些命令行属性将内部版本号和 ID 传递给 msbuild

/p:Configuration=%DebugAxis%;DefineConstants="BUILD_NUMBER=%BUILD_NUMBER%;BUILD_ID=%BUILD_ID%"

然后我只是将显示在面板中的变量发送到定义的变量:

mBuildNumber = BUILD_NUMBER;
mBuildId = BUILD_ID;

从我读过的所有文档来看,这似乎应该可以工作,但到目前为止还没有(价值永远不会改变)。我错过了这个技巧吗?注意:这是针对 C++ NOT C# 项目的。

【问题讨论】:

    标签: c++ jenkins msbuild


    【解决方案1】:

    很抱歉,您描述的情况我不是很清楚。

    但 Jenkins 环境变量使用 % 符号访问。

    所以我会使用:

    mBuildNumber = %BUILD_NUMBER%

    mBuildId = %BUILD_ID%

    我也觉得应该是命令行(在 DebugAxis 上不确定。所以那里没有 cmets):

    /p:Configuration=%DebugAxis%;DefineConstants="BUILD_NUMBER=${BUILD_NUMBER};BUILD_ID=${BUILD_ID}"
    

    【讨论】:

    • 我的错。您是否尝试过:在 msbuild 上的 BUILD_NUMBER=${BUILD_NUMBER} 等。在我的 NAnt 脚本调用 msbuild 的设置中,我使用这种格式来访问 Jenkins 环境变量。
    • 我们正在使用 %% 传递其他环境变量,它似乎正在工作(如 %DebugAxis%)。只有在这种情况下,环境变量才不会成为 C++ 的预处理器定义。
    • A /t:​​Rebuild 可能吗? stackoverflow.com/questions/10714668/…
    • 不,也试过了。该值仍然没有作为预处理器定义。重建将是必要的以重置该值,但一旦这工作正常。这样做是在使用 preproccesor 定义的文件上可能更快:stackoverflow.com/a/923927/158818
    • 你说价值永远不会改变。你得到的价值是什么。这可能会给出一些提示。
    猜你喜欢
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 2011-01-25
    • 2011-04-20
    • 2011-02-20
    • 1970-01-01
    相关资源
    最近更新 更多