Как да предам променлива от рецепта за bitbake към makefile?

Опитвам се да предам променлива от моята bitbake (.bb) рецепта към Makefile, който го извиквам.

В моята рецепта имам:

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, тогава щях да видя "bar" отпечатано в тестовия файл. Така че защо не "мина" правилно?

Проведох още един тест, за да проверя, в моя Makefile поставих само този ред:

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

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

Някой има ли представа какво правя грешно тук?


person Mike    schedule 13.03.2013    source източник


Отговори (2)


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

ifeq ($(FOO),bar)
  ...
person Idelic    schedule 13.03.2013
comment
Благодаря ти много. Направих това твърде сложно. Един въпрос към вас, защо работи, когато добавих FOO=bar директно в моя Makefile и го стартирах с make? Дали защото има разлика в това как се справя с локална дефиниция спрямо експортирана? - person Mike; 13.03.2013
comment
Ако направите FOO="bar" в Makefile, тогава $(FOO) ще включва кавичките, така че първоначалното ви сравнение ще работи. В BitBake символът " е използван за кавички, така че export FOO="bar" ще доведе до $(FOO), съдържащо низа bar (без кавички). - person Idelic; 13.03.2013

Преди да дефинирате своя метод do_compile, трябва да дефинирате променливата EXTRA_OEMAKE, чието съдържание е това:

EXTRA_OEMAKE = "FOO=bar"

След това във вашия метод do_compile трябва да извикате 'oe_runmake'. Това извикване извиква командата 'make' и цялото съдържание, дефинирано в променливата EXTRA_OEMAKE, се предава като аргумент на командата 'make'. Надявам се това да помогне!

person aicastell    schedule 18.02.2016