为什么 bitbake 会忽略我的 makefile 中的 CFLAGS?
Why does bitbake ignore CFLAGS in my makefile?
我的应用程序的 makefile 向 CFLAGS 添加了一些内容,如下所示:
CFLAGS += -Wall -std=gnu99
然而,当我使用 OpenEmbedded BitBake 构建应用程序时,BitBake 显然忽略了 makefile 中的 CFLAGS 变量。
我发现在应用程序的配方中添加以下行会导致在通过 BitBake 构建期间使用标志:
EXTRA_OEMAKE += "CFLAGS='-Wall -std=gnu99'"
为什么 BitBake 会像这样忽略 makefile 中的 CFLAGS?另外,有没有比将上面的行添加到配方中更好的解决方案?
我更希望只使用 makefile 的 CFLAGS 来消除冗余。
默认情况下,bitbake.conf
包含 EXTRA_OEMAKE = "-e MAKEFLAGS="
,它在其 运行 时传递给 make 命令(参见 base.bbclass
,其中 运行s ${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"
不幸的是,这里可能没有完美的解决方案,但希望这有助于理解它为什么会这样做。
我的应用程序的 makefile 向 CFLAGS 添加了一些内容,如下所示:
CFLAGS += -Wall -std=gnu99
然而,当我使用 OpenEmbedded BitBake 构建应用程序时,BitBake 显然忽略了 makefile 中的 CFLAGS 变量。
我发现在应用程序的配方中添加以下行会导致在通过 BitBake 构建期间使用标志:
EXTRA_OEMAKE += "CFLAGS='-Wall -std=gnu99'"
为什么 BitBake 会像这样忽略 makefile 中的 CFLAGS?另外,有没有比将上面的行添加到配方中更好的解决方案?
我更希望只使用 makefile 的 CFLAGS 来消除冗余。
默认情况下,bitbake.conf
包含 EXTRA_OEMAKE = "-e MAKEFLAGS="
,它在其 运行 时传递给 make 命令(参见 base.bbclass
,其中 运行s ${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"
不幸的是,这里可能没有完美的解决方案,但希望这有助于理解它为什么会这样做。