【问题标题】:Task is not re-triggered even if variables in vardeps change即使 vardeps 中的变量发生变化,也不会重新触发任务
【发布时间】:2022-01-06 10:56:37
【问题描述】:

我有一个与 vardeps 相关的问题,我正在执行一项依赖于某些变量的任务。

我创建了一些新变量,例如NEW_VARIABLE,将它们添加到BB_ENV_EXTRAWHITE。在一些食谱中,我编写了我自己的一些任务的实现,这些任务依赖于这些新变量,并且为了使这种依赖能够正常工作,我添加了例如do_install[vardeps] = "NEW_VARIABLE",所以我现在期待每次我更改这个NEW_VARIABLE 并执行例如,bitbake recipenamedo_install 任务应该运行。我检查了任务签名,我在那里看到了NEW_VARIABLE

让我们假设这个变量有两个可能的值。当我第一次设置变量“value1”,即第一次构建时,一切正常,没有问题。当我将其值更改为之前未使用的另一个值“value2”并再次构建配方时,do_install 也将运行并且不会出现问题。但是,问题是,如果我再次将变量设置为旧值“value1”,然后再次执行bitbake recipenamedo_install 不会被重新触发,这会导致位于work 目录中的一些错误/旧数据,并且还会在图像中产生。

我尝试设置BB_DONT_CACHE,正如我在一个老问题中所理解的那样,问题可能是需要再次解析配方,但这根本不起作用。

我不想在执行新构建时总是运行任务,即do_install[[nostamp] = "1",所以不能考虑这个解决方案。我只是希望它在每次更改 NEW_VARIABLE 时再次运行。

我所期待的行为是否正常?还是 Yocto 不能这样工作?

【问题讨论】:

    标签: yocto bitbake


    【解决方案1】:

    我整天都面临同样的问题,也尝试了 vardeps BB_DONT_CACHE 等,但后来我改为使用 SRC_URI 但仍然有相同的行为。像你一样,我构建了一个单独的配方“bitbake name”并在工作图像/中查找配方输出。对我来说,事实证明我只是认为这将被更新,就像我进行其他新更改一样。但是,一旦我将输入更改为旧的东西,状态缓存就会启动并且工作目录会被单独留下 - 愚弄我认为它不能正常工作。但是当我构建最终的图像库时,它会被正确填充。我想需要强制构建或忽略编译器缓存才能以这种方式获取输出。

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    • 感谢您的回复。没错,在最终图像中,您会发现所有内容都已填充。问题是,它们不是“新的”; Yocto 只是从某个缓存中获取这些文件,即使它们不在工作目录中,并将它们放入映像中,因此您会发现这些文件(填充在最终映像中)的日期比您的构建日期旧,我不希望,我希望任务运行,因为我进行了更改并在图像中看到了新的输出。我尝试了bitbake -c clean recipename 然后bitbake recipename 但它不起作用,工作目录中没有新文件,因此图像中没有新文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 2019-10-17
    • 2020-09-25
    • 2017-05-18
    相关资源
    最近更新 更多