Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么bitbake会忽略我的makefile中的cflag?_C_Linux_Makefile_Bitbake_Openembedded - Fatal编程技术网

为什么bitbake会忽略我的makefile中的cflag?

为什么bitbake会忽略我的makefile中的cflag?,c,linux,makefile,bitbake,openembedded,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中的cflag?还有,还有

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

CFLAGS += -Wall -std=gnu99
但是,当我使用OpenEmbedded BitBake构建应用程序时,BitBake显然忽略了makefile中的CFLAGS变量

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

EXTRA_OEMAKE += "CFLAGS='-Wall -std=gnu99'"
为什么BitBake会像这样忽略makefile中的cflag?还有,还有比在配方中添加上面的行更好的解决方案吗


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

默认情况下,
bitbake.conf
包含
EXTRA\u-OEMAKE=“-e-MAKEFLAGS=“
在make命令运行时传递给make命令(请参见
base.bbclass
,它运行
${make}${EXTRA\u-OEMAKE}$@

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

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

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

TARGET_CFLAGS += "-Wall -std=gnu99"

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

bitbake是否使用makefile?当运行
make
时,它是否显式地覆盖命令行上的
CFLAGS
?这令人困惑:bitbake使用
recipe
文件,而不是
makefile
。你为什么用bitbake?如果您有makefile,请使用gnu make。@EtanReisner Bitbake确实使用makefile,但据我所知,在运行make时,它不会显式覆盖命令行上的CFLAGS。@chqrlie配方文件向Bitbake描述了如何构建应用程序。makefile正在被利用,但由于某些原因,CFLAGS尤其被忽略。我必须使用BitBake,因为它是我用于嵌入式系统交叉编译的基于开放嵌入的构建系统的一部分。BitBake很可能将自己的
CFLAGS
值传递给
make
,从而使
make
忽略Makefile中设置的值,例如在
make
s命令行上。您可以使用某种详细模式来验证这一点。请注意,bitbake.conf现在有
额外的\u OEMAKE=“”
。看见