【问题标题】:How would I pass a variable from a bitbake recipe to a makefile?如何将变量从 bitbake 配方传递到 makefile?
【发布时间】:2013-03-01 16:46:01
【问题描述】:

我正在尝试将我的 bitbake (.bb) 配方中的变量传递给我让它调用的 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...

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

【问题讨论】:

    标签: makefile recipe openembedded bitbake


    【解决方案1】:

    在定义你的do_compile方法之前,你必须定义变量EXTRA_OEMAKE,它的内容是:

    EXTRA_OEMAKE = "FOO=bar"
    

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

    【讨论】:

    • 此任务的默认行为是在找到生成文件(Makefile、makefile 或 GNUmakefile)时运行 oe_runmake 函数。如果没有找到这样的文件,do_compile 任务什么也不做。
    【解决方案2】:

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

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

    【讨论】:

    • 非常感谢。我把它弄得太复杂了。给你一个问题,为什么当我直接在我的 Makefile 中添加 FOO="bar" 并使用make 运行它时它会起作用?是因为它处理本地定义和导出定义的方式不同吗?
    • 如果您在 Makefile 中使用 FOO="bar",则 $(FOO) 将包含引号,因此您的原始比较将起作用。在 BitBake 中," 字符 is 用于引用,因此 export FOO="bar" 将导致 $(FOO) 包含字符串 bar(不带引号)。
    猜你喜欢
    • 2018-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多