Давайте рассмотрим следующий пример в файле .bb
:
X = "1"
A := "X is '${X}' and Y is '${Y}'"
B = "X is '${X}' and Y is '${Y}'"
X = "2"
Y = "3"
На основании документации bitbake
, доступной в Интернете, и многочисленных других примеров, я ожидаю, что переменные A
и B
будут храниться следующие значения в конце синтаксического анализа:
A="X is '1' and Y is ''"
B="X is '2' and Y is '3'"
Однако выполнение bitbake -e <recipe name> | grep ^A
и то же самое для B
показывают, что фактические значения для переменных следующие:
A="X is '1' and Y is '3'"
B="X is '2' and Y is '3'"
Другими словами, я ожидал, что оператор непосредственного присваивания заставит пустую еще не определенную переменную (например, B
во время синтаксического анализа немедленного присваивания A
). Однако, похоже, что bitbake
выбирает последнее определенное значение для переменной. Такое поведение (выбора последнего определенного значения переменной) также согласуется со слабыми и стандартными присваиваниями.
Я также пробовал ту же концепцию немедленного присваивания для GNU Make
, и кажется, что make
ведет себя как я и ожидал:
X = 1
A := X is '$(X)' and Y is '$(Y)'
B = X is '$(X)' and Y is '$(Y)'
X = 2
Y = 3
A:
echo "$(A)"
B:
echo "$(B)"
Есть ли причина для поведения bitbake
, когда немедленное присваивание содержит неопределенную переменную? Или это просто ошибка?
Я склонен полагать, что мне чего-то не хватает.
$ bitbake --version
BitBake Build Tool Core version 1.42.0
$ make -v
GNU Make 4.2.1
Built for x86_64-pc-linux-gnu
Copyright (C) 1988-2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.