Yocto 레시피 파일에서 CFLAGS 컴파일하기

Yocto 레시피 파일에서 CFLAGS 컴파일하기

질문: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는 표현력이 낮기 때문에 이 태그로 추가할 수 없습니다.

관련 정보