Есть ли способ определить, была ли установлена переменная из среды по сравнению с командной строкой?
Я бы хотел провести различие между кем-то, кто вызывает make с make LIB=mylib, а не с make и $ LIB.
make LIB=mylib
make
Да. Вы можете использовать функцию origin , чтобы определить, где была определена переменная.
ifneq (,$(findstring environment,$(origin LIB))) # LIB was defined by the environment else # LIB was defined some other way endif
С не-Gnu make вы можете запустить команду export и grep для рассматриваемой переменной. Это работает только в правилах и только до тех пор, пока переменная не установлена как однократная (как в LIB=foo make).
export
grep
LIB=foo make