Вот информация из MSDN о рекурсивном вызове nmake
:
Используйте макросы рекурсии для рекурсивного вызова NMAKE. Рекурсивные сеансы наследуют макросы командной строки и переменных среды, а также информацию Tools.ini. Они не наследуют определенные в make-файле правила вывода или спецификации .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.
person
Michael Burr
schedule
28.04.2009