do_configure()
do_fetch()
까지 ${S}에 source, patch 등을 사용해 Sources를 받아왔다.build
디렉토리를 생성하고 Makefile을 생성하는 과정../configure [CONFIGURE_FLAGS]
를 실행시켜, Makefile 생성inherit cmake
) -> build 디렉토리에서 cmake .. [CMAKE_FLAGS]
실행해 Makefile 생성do_configure()
태스크의 기본 행동은 Makefile이 발견되면 oe_runmake clean
을 동작시킨다.make clean
을 실행하지 않는다.(default)CLEANBROKEN = "1"
명시하면 빌드 동안 make clean
이 실행되지 않는다.do_configure()
쉘EXTRA_OECONF
./configure --enable-something --prefix=/usr/bin
와 같이 ./configure
에 들어갈 옵션은 EXTRA_OECONF
에 지정하면 된다.EXTRA_OECONF += "--enable-something --prefix=/usr/bin"
configure.ac
파일이 있다면, configure
파일을 autotools
로 생성해야하는 오픈소스이다.~/hello : $ aclocal <options> -I m4
~/hello : $ autoconf
~/hello : $ autoheader
~/hello : $ automake -a
~/hello : $ mkdir build && cd build
~/hello/build : $ ../configure ${EXTRA_OECONF}
Makefile 생성됨
autotools
로 2)configure
파일을 생성 후, configure
를 수행해, Makefile
을 생성하는 것이inherit
autotools
do_configure()
의 동작이다.inherit
autotools
를 사용해, configure
를 생성하는 오픈소스 프로젝트 사용 시, 주의할 점이 있다.B = S
로 지정되어 있다.inherit
autotools
는 기본적으로 B
를 명시적으로 지정해야한다.B = S
inherit
autotools-bokensep
를 사용하자.EXTRA_OECONF
inherit
cmake
do_compile()
Makefile
, CMakeLists.txt
혹은 autotools
로 생되는 빌드 스크립트를 사용해 Compile한다고 생각하면 된다.do_configure
를 통해 해당 원본 소스 ${S}(Source)에서 compile을 위해 필요로하는 빌드 설정 파일들을 ${B}(Build)에 추출한다. (보통은 ${S} = ${B}
)do_compile
를 통해 ${B}(Build)에서 compile을 수행한다.do_compile()
태스크의 기본 행동은 Makefile이 발견되면 oe_runmake function
을 동작시킨다.Makefile
이 없는 경우do_compile()
부분do_compile() {
${CC} userprog.c ${LDFLAGS} -o userprog
}
${B}
변수가 가리키는 곳에 저장된다. (보통은 ${S}
와 같음)do_compile()
task의 default behaviour은 Makefile을 발견하면 oe_runmake
을 동작키는 것이다.oe_runmake
기본 동작make
를 직접 call하지 않아도 !! 알아서 bitbake가 do_compile()
할 때, oe_runmake
에서 make
호출한다.do_compile()
task에서 직접 make
호출하지 말자!make
call을 없애자.${WORKDIR}/temp/run.do_compile
파일을 보면 해당 컴포넌트의 do_compile() Task 일 때, log 기록을 볼 수 있다.oe_runmake
를 호출EXTRA_OEMAKE
make
명령 역할을 알아서 oe_runmake
가 해준다 치면, makefile
의 내부 변수 컨트롤 같은건 어떻게하나?EXTRA_OEMAKE += "Option"
과 같은 형식을 주면 된다.line : 6
가 반영된다.#define DEBUG
를 하거나gcc -DDEBUG userprog.c -o userprog
와 같이 compile time에 전처리문(CPPFLAGS)에 추가적인 option을 준다.EXTRA_OEMAKE
옵션을 사용한다.D=1
할당하는 옵션을 준다.EXTRA_OEMAKE += "D=1"
Makefile
내부에 D변수를 설정하고 1을 대입한다.do_configure()
task의 default behaviour는 Makefile을 발견하면 oe_runmake clean
을 동작시키는 것이다.Makefile
에서, src, output file을 너무 specific 위치에 지정해버리면, do_install()
때 못알아 먹음CFLAGS = MYOPTION
같이 =
으로 처리하면, 고정되므로 +=
를 사용할 것do_install()
do_compile[network] = "1"
Go, rust 쪽에서 build compile 중에 서브 모듈을 git 으로 dynamic fetch 한다.
이는 Yocto에서, compile 중 network 사용을 막고 있으므로, yocto를 사용하지 않고 빌드 시, 잘되는데 yocto do_compile에서 안될 수 있다.
이를 방지하기 위해, go.bbclass, cargo.bbclass에서 do_compile[network] = "1"
를 사용하면, do_compile 중에 network를 사용할 수 있다.
-D
in CMakeCMake
는 빌드하면서 -D
옵션으로 dynamic variable 지정할 수 있다.$ mkdir build
$ cd build
$ cmake -DCMAKE_INSTALL_PREFIX=/usr/bin ..
가령 이렇게 한다면 CMake
는 CMakeLists.txt
의 install
명령의 DESTINATION
을 동적으로 /usr/bin
으로 바꿔버린다.
SRC_URI
cmake class
를 inherit
한다.poky/meta-mylayer/recipes-example/myhello/myhello_0.4.bb
do_compile()
, do_install()
따로 필요 없음 (CMakeLists.txt
에서 명시해 뒀기 때문)EXTRA_OEMAKE
와 마찬가지로 CMake 변수를 동적으로 변경한다.$ cmake -DCMAKE_INSTALL_PREFIX=/bin
과 같이 작동하는 것