2015-10-07 5 views
0

я следующие вещи в моем Makefile (GNU)Как изменить значение переменного, когда цель называется

DLIB = $(DLIB_STATIC) 
DLIBFLAGS = $(DLIB_STATIC) 
DLIB_BUILDS = $(DLIB_STATIC) LIBDDUMMY 

# DLIB = $(DLIB_SHARED) 
# DLIBFLAGS = -Llib -lD 
# DLIB_BUILDS = $(DLIB_SHARED) 

all: BUILDALL TB 
tgt2: BUILDALL TB 

TB: $(DLIB_BUILDS) 

Мне нужно изменить значение DLIB, DLIBFLAGS & DLIB_BUILDS следующего

DLIB = $(DLIB_SHARED) 
DLIBFLAGS = -Llib -lD 
DLIB_BUILDS = $(DLIB_SHARED) 

когда tgt2 называется ,

Я попытался следующие

TEMP: 
    DLIB = $(DLIB_SHARED) 
    DLIBFLAGS = -Llib -lD 
    DLIB_BUILDS = $(DLIB_SHARED) 

tgt2: TEMP BUILDALL 

Но это не работает, как я могу это сделать?

ответ

0

GNU make имеет понятие о target-specific variable values. Просто поместите назначение переменного вместо предпосылок мишени:

tgt2: DLIB = $(DLIB_SHARED) 
tgt2: DLIBFLAGS = -Llib -lD 
tgt2: DLIB_BUILDS = $(DLIB_SHARED) 

tgt2: BUILDALL 

Таким образом, если BUILDALL цели построена через tgt2, он будет использовать специальный набор значений переменных.

+0

Нет, его не работает .... –

+0

Хм, он работает для меня, если цель 'BUILDALL' имеет только' echo $ (DLIB) 'получение. Как именно ваша цель «BUILDALL» использует данные переменные? Обратите внимание, что если у вас есть необходимые файлы для цели 'BUILDALL', уже построенные с помощью' make all', то вызов 'make tgt2' не перестраивает эти файлы. Сначала вам нужно очистить их. – Tsyvarev

Смежные вопросы