Вы устанавливаете EXTLIBS
в качестве целевой переменной для цели extlib32
. Такие переменные являются неглобальными, и их значение доступно только в целевом рецепте и предварительных условиях цели, а не глобально (поэтому $(info $(EXTLIBS))
не печатает ожидаемое значение).
Чтобы напечатать его значение, вам нужно распечатать его из рецепта цели extlib32
, например ::
extlib32:
@echo "EXTLIBS=${EXTLIBS}"
Если extlib32
и extlib64
являются .PHONY
целями для построения чего-либо, то ваши исходные назначения для конкретных целей должны распространяться на зависимости и быть доступными в их рецептах. Вы просто не можете распечатать его значение из глобальной области makefile.
Чтобы иметь один сборочный файл как в 32-, так и в 64-битном режиме (а также выпуск и отладка), вам нужно структурировать его по-разному и вызывать make
отдельно для каждого режима сборки. Пример:
# User can overrided capitalized variables. E.g.
# make BUILD=release MODE=32 LDLIBS=-lrt
BUILD := debug
MODE := 64
build_dir := ${BUILD}/${MODE}
ldlibs.32 := my-32-bit-libs
ldlibs.64 := my-64-bit-libs
ldlibs := ${ldlibs.${MODE}} ${LDLIBS}
all :
@echo "build_dir=${build_dir}"
@echo "ldlibs=${ldlibs}"
Примеры использования:
$ make
build_dir=debug/64
ldlibs=my-64-bit-libs
$ make BUILD=release MODE=32
build_dir=release/32
ldlibs=my-32-bit-libs
Другой пример параметров компиляции отладки / выпуска.