질문:ac 파일에 2개의 매크로를 추가했고 2개의 컴퓨터가 있습니다. Yocto 레시피를 사용하여 특정 머신에 대한 특정 매크로로 코드를 작성하고 싶습니다.
문제를 하위 부분으로 나누십시오. 안녕하세요 c
// 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="-Dxyz"를 처리하기 위해 Makefile에 ifeq 조건을 추가할 수 있다는 의도로 CFLAGS="-Dabc"를 하드코딩했습니다.
레시피 파일 내용:
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를 어떻게 사용할 수 있습니까?
추가 세부 사항:
특정 메타 레이어 아래에 이와 같은 디렉터리가 있습니다.
안녕하세요 세계
- 안녕하세요 c
- 안녕하세요.o
- 파일 생성
참고: CFLAGS는 표현력이 낮기 때문에 이 태그로 추가할 수 없습니다.