Вот информация из 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.