问题:我在 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 作为此标记。