如何将一个变量从一个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)
...
答
之前定义你do_compile方法,你必须定义变量EXTRA_OEMAKE此内容:
EXTRA_OEMAKE = "FOO=bar"
之后,在你的do_compile方法,你必须调用“oe_runmake”。该调用调用命令'make',EXTRA_OEMAKE变量中定义的所有内容都作为参数传递给'make'命令。希望这可以帮助!
非常感谢。我让这个太复杂了。有一个问题,为什么当我在Makefile中直接添加FOO =“bar”并使用'make'运行时,它为什么会起作用?是否因为它处理本地定义与导出定义有区别? – Mike 2013-03-13 16:58:06
如果你在Makefile中做了'FOO =“bar”',那么'$(FOO)'将会包含引号,所以你的原始比较将起作用。在'BitBake'中''''*用于引用,因此'export FOO =“bar”'将导致包含字符串'bar'(不含引号)的'$(FOO)'。 – Idelic 2013-03-13 17:10:01