как получить вывод команды при использовании Microsoft nmake? - PullRequest
6 голосов
/ 03 февраля 2011

С make в Linux мы можем делать такие вещи как:

foo=$(shell /bin/bar)

, который запускает команду bar и присваивает вывод foo. Позже это можно использовать в make-файле, ссылаясь на $(foo).

Но теперь у меня в руках проект Microsoft, который скомпилирован и связан с Microsoft nmake.exe. Есть ли что-то подобное для nmake, которое позволило бы мне запустить команду и назначить вывод переменной?

Ответы [ 2 ]

2 голосов
/ 24 декабря 2014

Хотя это старый вопрос, есть способ сделать то, что задают;он просто запутан, как и все в пакетных файлах!

Нужно использовать комбинированные механизмы того, что делает импорт переменных среды и что препроцессор может вызывать команды, а затем рекурсивно вызывать Makefile.Предполагается, что Makefile называется Makefile (без расширения, которое является значением по умолчанию).

!IFNDEF MAKE
MAKE=NMAKE
!ENDIF
!IFNDEF SHELLVALUE
!   IF [echo off && FOR /F "usebackq" %i IN (`hostname`) DO  SET SHELLVALUE=%i && $(MAKE)  /$(MAKEFLAGS) /nologo /f $(MAKEDIR)\Makefile && exit /b  ] == 0
!     MESSAGE Make completed
!   ELSE
!     ERROR Error in nmake
!   ENDIF
!ELSE
# $(SHELLVALUE) now contains the string returned from the command USERNAME
!MESSAGE Shellvalue is $(SHELLVALUE)
#      Put the parts of the makefile that depend on SHELLVALUE here
!ENDIF
#
# To be a valid makefile it must have some rules to perform
all:
     @echo;$(SHELLVALUE)

Да, я знаю, что это ужасно, но он демонстрирует, как выполнять технику, что может быть сделано с любымкоманда оболочки, а не просто hostname.

2 голосов
/ 10 марта 2011

Я думаю, что ответ "нет".Там нет эквивалента.

Я бы порекомендовал вам конвертировать в MSBuild, если это возможно.

...