Sebbene questa sia una vecchia domanda, esiste un metodo per fare ciò che viene richiesto; è solo contorto, come tutto nei file batch!
Uno deve utilizzare i meccanismi combinati del fatto che importa le variabili ambientali e che il preprocessore può richiamare i comandi e quindi chiamare il Makefile in modo ricorsivo. Assume che il Makefile si chiami Makefile (senza estensione, che è l'impostazione predefinita).
!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)
Sì, lo so la sua orribile, ma dimostra come fare la tecnica, che può essere fatto con qualsiasi comando della shell e non solo hostname
.
fonte
2014-12-24 18:51:53
Non ho mai trovato il modo di farlo. Per correttezza, MSBuild non ha risolto il problema, anche se alla fine l'ho convertito per altri motivi. Alla fine, per risolvere questo problema ho finito con lo script di un po 'di MS PowerShell per effettuare le chiamate necessarie di cui avevamo bisogno prima di costruire il progetto. –