我是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"
感谢。
答案 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中添加任何内容。