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

时间:2017-12-05 19:41:27

标签: yocto bitbake

我是Yocto构建环境的新手。我有一个C代码,其代码如下:

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

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

    return 0;
}

我想在local.conf文件中传递一个标志/参数MYDEF。我尝试了以下定义,但它们没有用。关于我做错什么以及可能解决的问题的任何想法?

MYDEF = 'y'
MYDEF ?= 'y'
MYDEF ??= 'y'
CFLAGS = "-DMYDEF"
TARGET_CFLAGS = "-DMYDEF"
BUILD_CFLAGS = "-DMYDEF"

感谢。

2 个答案:

答案 0 :(得分:1)

我能够通过编译您的示例代码来创建示例配方:

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_test 二进制:

$ ./hello_test 
HELLO WORLD
MYDEF is defined

答案 1 :(得分:0)

使用与@ 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中添加任何内容。