Make: присваивание переменной - PullRequest
0 голосов
/ 06 марта 2019

Я сталкиваюсь с проблемой при доступе к переменной из другого make-файла, который включен.

У меня есть test.mak, в котором есть переменная LIBS32: = $ (TESTLIBS) / $ (NEW_PLAT32), я включил test.mak в другом make-файле и попытка назначить эту переменную в одной из целей.

extlib32: EXTLIBS = $(LIBS32)
extlib64: EXTLIBS = $(LIBS64)

Ожидаемое значение EXTLIBS должно быть '/ home / testlib / extlibs / Linux'.Но здесь, когда я печатаю EXTLIBS, значение, которое я вижу, равно '/ home / testlib / extlibs /'

Примечание: - Когда я просто печатаю LIBS, я могу видеть содержимое, как и ожидалось.Но когда я назначен на EXTLIBS и пытаюсь его использовать ... я вижу, что слово "Linux" отсутствует.

Спасибо!

1 Ответ

0 голосов
/ 06 марта 2019

Вы устанавливаете 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 

Другой пример параметров компиляции отладки / выпуска.

...