在 Yocto 配方文件中编译 CFLAGS

在 Yocto 配方文件中编译 CFLAGS

问题:我在 ac 文件中添加了 2 个宏,并且有 2 台机器。使用 Yocto 配方,我希望为特定机器构建具有特定宏的代码。

将问题分解为子部分 - 你好ç

// Simple hello.c program
#include<stdio.h>

void main(){
    printf("Hello World!\n");

    //Introducing Macro 1 -- abc

    #ifdef abc
    printf("Day 1\n");
    #endif

    //Introducing Macro 2 -- xyz

    #ifdef xyz
    printf("Day 2\n");
    #endif
}

预期和观察到的输出:

gcc hello.c -o hello
./hello
Hello World!

gcc hello.c -Dabc -o test1
./test1
Hello World!
Day 1 

gcc hello.c -Dxyz -o test2
./test2
Hello World!
Day 2

生成文件内容:

obj-m := hello.o

SRC := ${shell pwd}

CFLAGS += -Dabc

all:
    ${MAKE} -C M=${SRC} ${CFLAGS}

test_install:
    ${MAKE} -C M=${SRC} ${CFLAGS} test_install

clean:
    rm -rf *.o

已使用检查了上述 Makefile 内容cat -e -t Makefile。它在每行末尾以 $ 正确终止。由于我使用的是 MAKE,所以它确实有 gcc 编译器。在 Makefile 中,我硬编码了 CFLAGS="-Dabc" ,目的是如果代码被相应编译,那么我可以将 ifeq 条件添加到 Makefile 处理其他 CFLAGS="-Dxyz"

配方文件内容:

S = "${WORKDIR}/helloworld/hello"

COMPATIBLE_MACHINE = "oldmachine|newmachine"
EXTRA_OEMAKE_oldmachine += "CFLAGS=-Dabc"
EXTRA_OEMAKE_newmachine += "CFLAGS=-Dxyz"

do_compile(){
    ${EXTRA_OEMAKE}_${MACHINE}
}

do_compile 的默认功能是运行 oe_runmake,我假设它将拾取我试图传递的 CFLAGS。

我检查了 tmp/work/... 文件夹下 log.do_compile 的内容,但没有看到正在使用 CFLAGS。

上面的菜谱我也重写为

do_compile_append_oldmachine(){
     CFLAGS="-Dabc"
}

do_compile_append_newmachine(){
     CFLAGS="-Dxyz" #Also tried passing EXTRA_OEMAKE_MACHINE as above
}

这种方法,当我检查 tmp/work/.. 目录下的 log.do_compile 文件时,也找不到 CFLAGS 部分。

如何使用 CFLAGS 以便它根据特定架构编译代码?

其他详细信息:

在特定的元层下,我有这样的目录。

你好世界

  • 你好ç
  • 你好.o
  • 生成文件

注意:由于代表较少,无法添加 CFLAGS 作为此标记。

相关内容