代码之家  ›  专栏  ›  技术社区  ›  user5071535

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

  •  7
  • user5071535  · 技术社区  · 8 年前

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

    CFLAGS += -Wall -std=gnu99
    

    然而,当我用OpenEmbedded BitBake构建应用程序时,BitBaker显然忽略了生成文件中的CFLAGS变量。

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

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

    为什么BitBake会像这样忽略makefile中的CFLAGS?此外,有没有比在食谱中添加上面的行更好的解决方案?

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

    1 回复  |  直到 8 年前
        1
  •  26
  •   pevik Hudson    4 年前

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

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

    它这样做的原因是,在交叉编译时,有一些编译器标志很重要,通常,系统比 Makefile 做正如你所发现的,这有时会失败。

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

    TARGET_CFLAGS += "-Wall -std=gnu99"
    

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