2011-02-03 8 views
5

Con make en Linux, podemos hacer cosas como:cómo obtener el resultado de un comando al usar Microsoft nmake?

foo=$(shell /bin/bar) 

que se ejecuta el comando bar y asigna el resultado a foo. Esto se puede usar más adelante en el archivo MAKE haciendo referencia al $(foo).

Pero ahora tengo un proyecto de Microsoft en mis manos que está compilado y vinculado con Microsoft nmake.exe. ¿Hay algo equivalente para nmake que me permita ejecutar un comando y asignar el resultado a una variable?

Respuesta

2

Creo que la respuesta es "no". No hay equivalente

Te recomiendo que conviertas a MSBuild si es posible.

+0

Nunca encontré la manera de hacerlo. Para ser justos, MSBuild tampoco resolvió el problema, aunque eventualmente lo convertí por otras razones. Al final, para resolver este problema, terminé escribiendo un poco de MS PowerShell para hacer las llamadas necesarias que necesitábamos antes de construir el proyecto. –

2

Aunque esta es una vieja pregunta, hay un método para hacer lo que se pide; es simplemente intrincado, ¡como todo en los archivos por lotes!

Uno tiene que usar los mecanismos combinados del hecho de que las importaciones importan variables ambientales y que el preprocesador puede invocar comandos, y luego llamar al Makefile recursivamente. Asume que Makefile se llama Makefile (sin extensión, que es la predeterminada).

!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í, sé que es horrible, pero demuestra cómo hacer la técnica, que se puede hacer con cualquier comando de shell y no sólo hostname.

Cuestiones relacionadas