Я предполагаю, что приведенный вами пример - это рецепт какого-то правила. По синтаксису здесь похоже, что вы пытаетесь установить переменную make COMPILER_CMD из рецепта на основе значения некоторого логического теста оболочки, что, конечно, невозможно. Вы должны четко понимать, как работает make: make никоим образом не интерпретирует написанные вами рецепты. Make просто передает эти рецепты другой программе (оболочке), а другая программа интерпретирует эти команды. Таким образом, вы не можете изменить поведение make, включая установку переменных make, из рецепта: этот рецепт запускается в совершенно другой программе.
Как уже говорили другие, вы не предоставляете достаточно информации о том, что ДЕЙСТВИТЕЛЬНО хотите сделать на более высоком уровне, чтобы мы могли дать полное решение. Наличие логического значения типа 1==1
не дает никаких намеков на то, почему вы это делаете. Кроме того, синтаксис вашей оболочки содержит синтаксические ошибки, поэтому мы можем сказать, что вы на самом деле не вырезали и не вставляли это из реального рабочего примера.
Вы можете, как предполагает piokuc, использовать переменную оболочки COMPILER_CMD (вы должны удалить пробел вокруг =
, чтобы сделать ее назначением переменной оболочки), но это значение вступает в силу только во время работы одной строки рецепта. Для следующей строки рецепта запускается новая оболочка, и все значения, установленные в предыдущей оболочке, теряются:
all:
@ if [[ 1 == 1 ]]; then COMPILER_CMD=-fpic; fi; \
echo COMPILER_CMD=$$COMPILER_CMD
@ echo COMPILER_CMD=$$COMPILER_CMD
даст:
COMPILER_CMD=-fpic
COMPILER_CMD=