2013-03-13 2 views
2

Я пытаюсь передать переменную из моего рецепта bitbake (.bb) в Makefile, который я вызываю.Как передать переменную из рецепта bitbake в make-файл?

В моем рецепте у меня есть:

export FOO="bar" 

Когда он запускает метод do_compile() у меня есть это вызов Makefile я произвел. В Makefile я тестировал переменная была установлена ​​правильно с помощью:

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

Когда я испечь рецепт я просто вижу «Работают ли не» в журнале. Я думал, что это было очень странно, потому что, если бы у меня был FOO="bar" в моем Makefile и только что побежал make, тогда я увижу «бар», напечатанный в тестовом файле. Так почему же он «не прошел» правильно?

Я побежал еще один тест, чтобы проверить, в моей Makefile я только поставил эту строку:

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

И затем после выпечки рецепта я вижу bar напечатан в моем файле «always_print.txt» пока я вижу " Не работает ", напечатанный в test.txt ...

Кто-нибудь знает, что я делаю неправильно здесь?

ответ

3

make язык не использует " как цитировал характер, так что вы сравниваете $(FOO) против "bar" (котировки включены). Просто опустить кавычки:

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

спасибо. Я делал это слишком сложным. Один вопрос для вас, почему он работал, когда я добавил FOO = «bar» непосредственно в мой Makefile и запускал его с помощью 'make'? Это потому, что есть разница в том, как он обрабатывает локальный define или экспортированный? – Mike

+2

Если вы делаете 'FOO =" bar "' в Makefile, тогда '$ (FOO)' будет включать кавычки, поэтому ваше исходное сравнение будет работать. В 'BitBake' символ' '' * используется * для цитирования, поэтому 'export FOO =" bar "' приведет к '$ (FOO)', содержащему строку 'bar' (без кавычек). – Idelic

2

Прежде чем определить свой метод do_compile, вы должны определить переменную EXTRA_OEMAKE которой это содержание:

EXTRA_OEMAKE = "FOO=bar" 

После этого в вашем методе do_compile вы должны называть "oe_runmake. Этот вызов вызывает команду «make», и все содержимое, определенное в переменной EXTRA_OEMAKE, передается как аргумент команде «make». Надеюсь это поможет!