如何将bitbake配方中的变量传递给makefile?

Mik*_*ike 3 makefile recipe openembedded bitbake

我正在尝试将我的bitbake(.bb)配方中的变量传递给我调用它的Makefile.

在我的食谱中我有:

export FOO="bar"
Run Code Online (Sandbox Code Playgroud)

当它运行do_compile()方法时,我让它调用我生成的Makefile.在我测试的Makefile中,通过以下方式正确设置了变量:

ifeq ($(FOO), "bar")
    echo $(FOO) >> ./test.txt
else
    echo "Didn't work" >> ./test.txt
endif
Run Code Online (Sandbox Code Playgroud)

当我烘焙食谱时,我只是在日志中看到"没有工作".我觉得这很奇怪,因为如果我FOO="bar"在我的Makefile中运行make,那么我会在测试文件中看到"bar".那么为什么它没有"正确"通过?

我又运行了一个测试验证,在我的Makefile中我只放了这行:

echo $(FOO) >> ./always_print.txt
Run Code Online (Sandbox Code Playgroud)

然后烘焙配方后,我看到bar打印在我的"always_print.txt"文件中,但我看到test.txt中打印出"Did not work"...

有没有人知道我在这里做错了什么?

Ide*_*lic 6

make语言不用"作引用字符,因此您要进行比较$(FOO)"bar"包括引号)。只需省略引号即可:

ifeq ($(FOO),bar)
  ...
Run Code Online (Sandbox Code Playgroud)

  • 如果您在 Makefile 中执行 `FOO="bar"`,则 `$(FOO)` 将包含引号,因此您原来的比较将起作用。在`BitBake`中,`"`字符*用于引用,因此`export FOO="bar"`将导致`$(FOO)`包含字符串`bar`(不带引号)。 (2认同)

aic*_*ell 5

在定义do_compile方法之前,你必须定义变量EXTRA_OEMAKE这个内容:

EXTRA_OEMAKE = "FOO=bar"
Run Code Online (Sandbox Code Playgroud)

之后,在do_compile方法中,您必须调用'oe_runmake'.该调用调用命令'make',并且EXTRA_OEMAKE变量中定义的所有内容作为参数传递给'make'命令.希望这可以帮助!