如何传递Yocto项目的编译时参数?

如何传递Yocto项目的编译时参数?,yocto,bitbake,Yocto,Bitbake,我不熟悉Yocto构建环境。我有一个C代码,其中一些代码如下: #include <stdio.h> int main () { printf("HELLO WORLD\n"); #ifdef MYDEF printf("MYDEF is defined\n"); #endif return 0; } 谢谢。我通过编译示例代码创建了一个示例配方: LICENSE = "CLOSED" SRC_URI = "file://hello_test.cpp"

我不熟悉Yocto构建环境。我有一个C代码,其中一些代码如下:

#include <stdio.h>
int main ()
{
    printf("HELLO WORLD\n");

#ifdef MYDEF
    printf("MYDEF is defined\n");
#endif

    return 0;
}

谢谢。

我通过编译示例代码创建了一个示例配方:

LICENSE = "CLOSED"

SRC_URI = "file://hello_test.cpp"
S = "${WORKDIR}"

inherit native

MYDEF = "y"

do_compile (){
  ${CC} -DMYDEF -o hello_test ${S}/hello_test.cpp
}

do_install () {
    install -d ${D}${bindir}
    install ${B}/hello_test ${D}/${bindir}
}
以及hello_测试二进制文件的执行证明:


使用与@astor555相同的代码,处理标志的方式存在一些问题

LICENSE = "CLOSED"

SRC_URI = "file://hello_test.cpp"
S = "${WORKDIR}"

inherit native

MYDEF ?= "-DMYDEF"

do_compile (){
  ${CC} ${MYDEF} -o hello_test ${S}/hello_test.cpp
}

do_install () {
    install -d ${D}${bindir}
    install ${B}/hello_test ${D}/${bindir}
}
注意MYDEF变量的定义,以及它在do_compile函数中的引用方式。 然后在local.conf中,您可以通过覆盖其值来禁用它:

MYDEF = ""
或者像这样强迫它:

MYDEF = "-DMYDEF"

但是,与配方中使用的弱赋值?=一样,默认情况下,它将是值,因此,如果希望定义它,则不需要在local.conf中添加任何内容。

是否使用makefile或普通c代码?在此设置中,我不使用makefile。我知道如何使用Makefile通过使用-DMYDEF传递一些东西来实现这一点,但这是一个基于yocto的构建系统,我不知道它在幕后生成了什么。我只是想告诉Yocto的bitbake命令,请将MYDEF作为定义的参数传递。有什么想法吗?然后@astor555答案就会出来。Yocto没有做什么特别的事。您需要像他一样使用${CC},其他一切都由astro555管理,谢谢您的回答。这真的很有帮助。然而,我的要求是将这个MYDEF=“y”放在local.conf文件中,因为我不应该修改.bb或.bbappend文件。如果您知道这个问题的答案,请让我知道。您是否尝试将这一行MYDEF=“y”移动到local.conf中,它可以工作。要检查哪些变量及其生成位置,您可以使用-e选项(例如,在您的示例中是bitbake-e hello test | grep MYDEF)。如果您不能修改这些层,另一个解决方案是为您的附件创建新层(我假设您可以修改bblayers.conf)。当它不起作用时,我把问题贴在这里。除了在local.conf文件中,您还做了其他更改吗?答案可能不正确。定义MYDEF是因为它是在do_compile函数中强制执行的。实际编译它不会受到配方变量的影响。
MYDEF = ""
MYDEF = "-DMYDEF"