Как пересылать макросы между вызовами nmake? - PullRequest
1 голос
/ 29 апреля 2009

Как переслать макросы между вызовами nmake?

Допустим, у нас есть

--- a.mak ---

some_variable = value

all:
   nmake -f b.mak

--- END ---

--- b.mak ---

all:
   @echo some_variable = WHAT TO PUT HERE TO GET VALUE OF some_variable?

--- END ---

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

Ответы [ 2 ]

1 голос
/ 29 апреля 2009

Вот информация из MSDN о вызове nmake рекурсивно :

Используйте рекурсивные макросы для рекурсивного вызова NMAKE. Рекурсивные сеансы наследуют макросы командной строки и переменных среды и информацию Tools.ini. Они не наследуют определенные в makefile правила вывода или спецификации .SUFFIXES и .PRECIOUS. Чтобы передать макросы в рекурсивный сеанс NMAKE, либо задайте переменную среды с помощью SET перед рекурсивным вызовом, либо определите макрос в команде для рекурсивного вызова, либо определите макрос в Tools.ini.

Итак, вы можете сделать a.mak похожим на:

# ---- a.mak ----
some_variable = value

all:   
    nmake -f b.mak some_variable=$(some_variable)
#--- END ---

Также обратите внимание, что использование соманды set для помещения переменной в среду также будет работать, но nmake автоматически использует заглавные буквы в именах переменных среды (даже для странных, таких как "windir", которая в нижнем регистре в система по какой-либо причине) и учитывает регистр, поэтому для использования переменной среды необходимо использовать переменную в верхнем регистре.

От MSDN :

унаследованные имена преобразуются в верхний регистр. Наследование происходит до предварительной обработки

Итак, вот как должен выглядеть ваш b.mak, если вы собираетесь передавать переменную, используя окружение, а не явно в командной строке:

#--- b.mak ---
all:
   @echo some_variable is: $(SOME_VARIABLE)
#--- end ---

Из-за этого, вероятно, неплохо было бы стандартизировать соглашение об именовании с полностью прописными буквами для имен макросов nmake.

0 голосов
/ 29 апреля 2009

Может быть, вам стоит подумать о том, чтобы не вызывать make рекурсивно, см. Статью Recursive Make считается вредным . Вы по-прежнему можете иметь модульные файлы, аналогичные уже имеющимся у вас make-файлам (включая make), только правила определены только в одном make-файле верхнего уровня.

...