2011-02-03 14 views
5

Con make su Linux, possiamo fare le cose come:come ottenere l'output di un comando quando si utilizza Microsoft nmake?

foo=$(shell /bin/bar) 

che esegue il comando bar e assegna l'output a foo. Questo può essere successivamente utilizzato nel makefile facendo riferimento a $(foo).

Ma ora ho un progetto Microsoft sulle mie mani che è compilato e collegato con Microsoft nmake.exe. C'è una cosa equivalente per nmake che mi permetterebbe di eseguire un comando e assegnare l'output a una variabile?

risposta

2

Penso che la risposta sia "no". Non c'è equivalente.

Si consiglia di convertire in MSBuild se possibile.

+0

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. –

2

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.