【问题标题】:Why does bitbake ignore CFLAGS in my makefile?为什么 bitbake 会忽略我的 makefile 中的 CFLAGS?
【发布时间】:2016-04-28 08:30:40
【问题描述】:

我的应用程序的 makefile 向 CFLAGS 添加了如下内容:

CFLAGS += -Wall -std=gnu99

但是,当我使用 OpenEmbedded BitBake 构建应用程序时,BitBake 显然忽略了 makefile 中的 CFLAGS 变量。

我发现在应用程序的配方中添加以下行会导致在通过 BitBake 构建期间使用标志:

EXTRA_OEMAKE += "CFLAGS='-Wall -std=gnu99'"

为什么 BitBake 会像这样忽略 makefile 中的 CFLAGS?另外,有没有比将上面的行添加到配方更好的解决方案?

我希望只使用 makefile 的 CFLAGS 来消除冗余。

【问题讨论】:

  • bitbake 是否使用了makefile?它在运行make 时是否在命令行上显式覆盖CFLAGS
  • 这令人困惑:bitbake 使用recipe 文件,而不是makefile。你为什么使用bitbake?如果你有 makefile,请使用 gnu make。
  • @EtanReisner Bitbake 确实使用了 makefile,但据我所知,它在运行 make 时并没有在命令行上显式覆盖 CFLAGS。
  • @chqrlie 配方文件向 BitBake 描述了如何构建应用程序。正在使用生成文件,但由于某种原因,特别是 CFLAGS 被忽略了。我必须使用 BitBake,因为它是基于 OpenEmbedded 的构建系统的一部分,我用于嵌入式系统的交叉编译。
  • 很可能bitbake将自己的CFLAGS值传递给make,使make忽略Makefile中设置的值,例如makes命令线。您可以使用某种详细模式来验证这一点。

标签: c linux makefile bitbake openembedded


【解决方案1】:

默认情况下,bitbake.conf 包含 EXTRA_OEMAKE = "-e MAKEFLAGS=",它在运行时传递给 make 命令(请参阅 base.bbclass,它运行 ${MAKE} ${EXTRA_OEMAKE} "$@")。

make 的-e 选项意味着环境变量会覆盖makefile(来自make --help)。您还会注意到 bitbake.conf 在其他几个导出变量中设置了 export CFLAGS = "${TARGET_CFLAGS}",因此在环境中设置了 CFLAGS

这样做的原因是有一些编译器标志在交叉编译时很重要,一般来说,系统比Makefile 更清楚要使用什么。正如您所发现的,这有时会失败。

您可以从EXTRA_OEMAKE 中删除-e 选项,但您会冒其他关键变量设置不正确的风险(例如,它是否会找到交叉编译器)。另一个稍微干净的解决方案可能是添加到TARGET_CFLAGS,例如:

TARGET_CFLAGS += "-Wall -std=gnu99"

不幸的是,这里可能没有完美的解决方案,但希望这有助于理解它为什么会这样做。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
相关资源
最近更新 更多