2013-03-13 110 views
2

我想從我的bitbake(.bb)食譜傳遞一個變量到我調用的Makefile。如何將一個變量從一個bitbake配方傳遞給一個makefile?

在我的食譜,我有:

export FOO="bar" 

當它運行的do_compile()方法我把它叫我產生一個Makefile。在Makefile中,我測試的變量是通過正確設置:

ifeq ($(FOO), "bar") 
    echo $(FOO) >> ./test.txt 
else 
    echo "Didn't work" >> ./test.txt 
endif 

當我烤的食譜我只是在日誌中看到「沒有工作」。我覺得這很奇怪,因爲如果我在我的Makefile中有FOO="bar",並且剛剛運行make,那麼我會在測試文件中看到「bar」打印。那爲什麼它沒有「正確地通過」?

我跑了一個更多的測試來驗證,在我的Makefile中,我只把這個行:

echo $(FOO) >> ./always_print.txt 

然後烘焙食譜我看到bar印在我的「always_print.txt」文件後,我卻看到了「沒有工作「印在test.txt ...

有沒有人有線索我在做什麼錯在這裏?

回答

3

make語言不使用"作爲引用字符,因此您將$(FOO)"bar"(包括引號)進行比較。只是省略了引號:

ifeq ($(FOO),bar) 
    ... 
+0

非常感謝。我讓這個太複雜了。有一個問題,爲什麼當我在Makefile中直接添加FOO =「bar」並使用'make'運行時,它爲什麼會起作用?是否因爲它處理本地定義與導出定義有區別? – Mike 2013-03-13 16:58:06

+2

如果你在Makefile中做了'FOO =「bar」',那麼'$(FOO)'將會包含引號,所以你的原始比較將起作用。在'BitBake'中''''*用於引用,因此'export FOO =「bar」'將導致包含字符串'bar'(不含引號)的'$(FOO)'。 – Idelic 2013-03-13 17:10:01

2

之前定義你do_compile方法,你必須定義變量EXTRA_OEMAKE此內容:

EXTRA_OEMAKE = "FOO=bar" 

之後,在你的do_compile方法,你必須調用「oe_runmake」。該調用調用命令'make',EXTRA_OEMAKE變量中定義的所有內容都作爲參數傳遞給'make'命令。希望這可以幫助!

相關問題