這裏記載如何使用Yocto編譯一個cmake的helloworld的程序
我想把這個helloworld當成一個新的模塊區別與yocto版本的helloworld
1.所以先在yo目錄下,建立一個cmakehelloworld文件夾.
2.使用了層,需要在conf路徑下新建立一個文件叫,bblayers.conf,yocto用這個文件來管理層。
內容寫上這一句就可以了:
BBLAYERS += "${TOPDIR}/cmakehelloworld"
3.回到自己的層,也就是/cmakehelloworld/這個路徑裏,添加自己的層的配置文件,建立conf文件夾,在裏面建立一個叫layer.conf的文件:
內容爲:
BBFILES += "${LAYERDIR}/recipes/*.bb"
BBPATH .= ":${LAYERDIR}"
BBFILE_COLLECTIONS += "cmakehelloworld"
BBFILE_PATTERN_cmakehelloworld := "^${LAYERDIR}/"
BBFILE_PRIORITY_cmakehelloworld = 5
4.在cmakehelloworld路徑下放上我們的主角helloworld,先建立個source文件夾,在裏面寫一個main.c
內容爲
#include <stdio.h>
int main(){
printf("Hello world ,I am Cmake in yocto!\n");
return 0;
}
5.編譯上面的代碼,方法爲在cmakehelloworld路徑下建立build文件夾,在裏面放上CMakeLists.txt文件
內容爲:
PROJECT(hello_cm)
SET(SRC_LIST ${CMAKE_CURRENT_SOURCE_DIR}/../source/main.c)
SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../image)
ADD_EXECUTABLE(hello_cm ${SRC_LIST})
6.把編譯步驟寫進bb裏,方法爲在cmakehelloworld下建立recipes文件夾,在裏面放上hello_cmake.bb文件
內容爲:
inherit cmake
DESCRIPTION = "Hello world in cmake"
PN = 'hello_cm'
PV = '1'
SRCREV = "${AUTOREV}"
S = "${TOPDIR}/cmakehelloworld/build"
7.由於yotco默認執行do_build task(修改默認task的方法爲BB_DEFAULT_TASK = "build"這裏的Build改成其他的就可以了),而base的class裏的build無法實現我們的Cmake編譯,所以在cmakehelloworld下建立classes,裏面放上cmake.bbclass
內容爲:
do_build() {
cd ${S}
cmake .
make
}
到這裏就可以了,在yo路徑下執行bitbake hello_cm就可以看到在image裏生成的hello_cm執行程序,執行./hello_cm
Hello world ,I am Cmake in yocto!
大功告成!