【问题标题】:GNAT Recompiling Libray files / how to force recompile allGNAT重新编译Libray文件/如何强制重新编译所有
【发布时间】:2021-02-16 15:21:47
【问题描述】:

我有一个错误,我得到那个文件 X(在标准库中)需要重新编译,因为另一个文件已经改变。它已经改变了,因为我不小心改变了它但更正了改变(用 md5sum 检查确认)。但是时间戳已经改变,所以现在其他项目不会因此而编译。没有重新安装(这肯定不是必要的,但有可能)解决这个问题的方法是什么?

我尝试在构建时将-f 选项添加到gprbuild 以强制重新编译,我得到了相同的结果。

确切的错误:

error: "a-direct.adb" must be recompiled ("a-calfor.ads" has been modified)
error: "a-calfor.adb" must be recompiled ("a-calfor.ads" has been modified)
error: "g-calend.adb" must be recompiled ("a-calfor.ads" has been modified)
...

【问题讨论】:

    标签: ada gnat


    【解决方案1】:

    当在用户项目上调用时,gprbuild 知道编译该项目(及其依赖项),而不是运行时。

    我认为,AdaCore 的客户提供了重新编译运行时的支持,并且在 GCC 源代码中有 GPR 和 daunting Makefile

    gnatmake 有一个开关-a,它强制将任何必要的运行时源重新编译到您的对象目录中。我不认为 gprbuild 支持它,在任何情况下你都需要为你的所有项目调用它。

    如果我是你,我会继续重新安装。

    【讨论】:

    • 重新编译运行时文件的开关是-gnatg,gnatmake for CE应该有它
    • @egilhh,是的,但这不会让 gnatbind/gnatlink 在构建期间考虑新对象
    • @egilhh,如果由于-a-gnatg(甚至是-gnatpg?)而导致重新编译RTS单元
    【解决方案2】:

    好的,这可能不是警告的意图,但我只需要开始。所以我添加了(根据gnatbind 的帮助)——为活页夹添加-t 选项,并在gprbuild 中添加以下内容。

    gprbuild -<options> -P <project_file>.gpr -bargs -t
    

    将错误更改为警告并生成我的可执行文件。

    显然不是解决错误的“正确”方法,但这部分并不重要,我需要继续。

    【讨论】:

      猜你喜欢
      • 2014-04-08
      • 1970-01-01
      • 2012-10-14
      • 1970-01-01
      • 1970-01-01
      • 2022-07-08
      • 1970-01-01
      • 2015-10-16
      • 2011-05-11
      相关资源
      最近更新 更多