为什么bitbake忽略了我的makefile中的CFLAGS?

时间:2016-01-21 21:41:20

标签: c linux makefile bitbake openembedded

我的应用程序的makefile为CFLAGS添加了一些内容,如下所示:

CFLAGS += -Wall -std=gnu99

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

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

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

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

我更喜欢使用makefile的CFLAGS来消除冗余。

1 个答案:

答案 0 :(得分:19)

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

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

它这样做的原因是在交叉编译时有一些重要的编译器标志,一般来说,系统比makefile更好地了解使用什么。这有时会失败,因为您已经找到了。

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

TARGET_CFLAGS + =" -Wall -std = gnu99"

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