ifeq
анализируется при чтении make-файла. Даже если кажется, что это часть рецепта, это не так. Вы можете сказать, что это не так, потому что он не имеет отступа с помощью символа TAB. Все, что не имеет отступа с помощью TAB, является частью make-файла, а не частью рецепта, и анализируется при считывании make-файла, а не при выполнении правила.
Итак, к моменту выполнения вашего правила оно попадает в ваш eval
, все операторы ifeq
уже давно расширены и рассмотрены.
В общем, практически никогда не стоит использовать eval
внутри рецепта. Он почти никогда не сделает то, на что вы надеетесь.
Если вам нужно проверить какое-то значение внутри рецепта, вам нужно написать для этого код оболочки, а не код make-файла, и сделать отступ для кода оболочки с помощью TAB, чтобы передать его в оболочку.