如何将一个变量从一个bitbake配方传递给一个makefile?

问题描述:

我想从我的bitbake(.bb)食谱传递一个变量到我调用的Makefile。如何将一个变量从一个bitbake配方传递给一个makefile?

在我的食谱,我有:

export FOO="bar" 

当它运行的do_compile()方法我把它叫我产生一个Makefile。在Makefile中,我测试的变量是通过正确设置:

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

当我烤的食谱我只是在日志中看到“没有工作”。我觉得这很奇怪,因为如果我在我的Makefile中有FOO="bar",并且刚刚运行make,那么我会在测试文件中看到“bar”打印。那为什么它没有“正确地通过”?

我跑了一个更多的测试来验证,在我的Makefile中,我只把这个行:

echo $(FOO) >> ./always_print.txt 

然后烘焙食谱我看到bar印在我的“always_print.txt”文件后,我却看到了“没有工作“印在test.txt ...

有没有人有线索我在做什么错在这里?

make语言不使用"作为引用字符,因此您将$(FOO)"bar"(包括引号)进行比较。只是省略了引号:

ifeq ($(FOO),bar) 
    ... 
+0

非常感谢。我让这个太复杂了。有一个问题,为什么当我在Makefile中直接添加FOO =“bar”并使用'make'运行时,它为什么会起作用?是否因为它处理本地定义与导出定义有区别? – Mike 2013-03-13 16:58:06

+2

如果你在Makefile中做了'FOO =“bar”',那么'$(FOO)'将会包含引号,所以你的原始比较将起作用。在'BitBake'中''''*用于引用,因此'export FOO =“bar”'将导致包含字符串'bar'(不含引号)的'$(FOO)'。 – Idelic 2013-03-13 17:10:01

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

EXTRA_OEMAKE = "FOO=bar" 

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