首先說明,yocto中的依賴本質上是任務之間的依賴,即使是使用DEPENDS
或者RDEPENDS
定義的兩個recipe之間的依賴關係,但實際上在yocto運行時依賴關係還是會體現在這兩個recipe中的task之間,即在運行時,yocto會將recipe之間的依賴解析成task之間的依賴。
task之間的依賴關係可以分爲兩種:屬於同一個recipe的task之間的依賴或者屬於不同recipe的task之間的依賴。而屬於不同recipe的task之間的依賴又可分爲構建時依賴或者運行時依賴,其中構建時依賴是指在yocto構建時某個包會依賴另一個包提供的頭文件、so文件或者可執行文件來完成自身的編譯過程;而運行時依賴是指某個包編譯生成的可執行文件在板子上運行時,需要依賴另一個包提供的so文件等。yocto對待構建時依賴和運行時依賴的區別不大,主要是將構建時依賴和運行時依賴解析成task之間的依賴時有些不同,且yocto會自動生成一些運行時依賴關係(參考前一篇博客),另外運行時依賴關係指的是兩個包(PACKAGES變量中的)之間,而不是兩個recipe之間。
- 屬於同一個recipe的task之間的依賴可以用
addtask
來設置 - 屬於不同recipe的task之間的依賴可以用多種方式來定義、如
depends
、rdepends
、deptask
、rdeptask
和recrdeptask
等,下面詳細介紹每種方式。 depends
用於定義不同recipe之間的task之間的構建時依賴,如do_patch[depends] = "quilt-native:do_populate_sysroot"
表示本recipe的do_patch
任務依賴於quilt-native
的do_populate_sysroot
任務。rdepends
用於定義不同recipe之間的task之間的運行時依賴,使用方式和depends
類似,都只是用於告訴yocto框架讓某個任務在另一個任務完成之後再運行deptask
也是用於不同recipe之間的task之間的構建時依賴,不過和depends
不同的是deptask
可以用於批量定義依賴,如do_configure[deptask] = "do_populate_sysroot"
表示本recipe的do_configure
任務需要在所有包含於DEPENDS
變量中的其它recipe的do_populate_sysroot
任務運行之後才能運行rdeptask
也是用於批量定義依賴關係,如do_package_qa[rdeptask] = "do_packagedata",
與deptask
不同的是,它表示本recipe的do_package_qa
任務需要在所有包含於RDEPENDS
變量中的其它recipe的do_packagedata
任務運行之後才能運行recrdeptask
同時包含了deptask
和rdeptask
的功能,並且遞歸地尋找依賴recipe。也就是說如果A依賴了B,B依賴了C,C依賴了D,那麼在A中設置do_a[recrdeptask] = do_b
表示A的a
任務會在B、C、D的b
任務都運行完畢之後再運行。