Как мне передать переменную из рецепта bitbake в make-файл?

Я пытаюсь передать переменную из моего рецепта 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