2011-02-03 18 views
5

Z make na Linuksie, możemy robić takie rzeczy jak:jak uzyskać dane wyjściowe polecenia przy korzystaniu z Microsoft nmake?

foo=$(shell /bin/bar) 

czyli polecenia bar i przypisuje wyjście do foo. To może być później użyte w makefile przez odniesienie $(foo).

Ale teraz mam projekt Microsoft na moich rękach, który jest skompilowany i połączony z Microsoft nmake.exe. Czy istnieje odpowiednik dla nmake, który pozwoliłby mi uruchomić polecenie i przypisać wyjście do zmiennej?

Odpowiedz

2

Myślę, że odpowiedź brzmi "nie". Nie ma odpowiednika.

Zalecam, abyś przekonwertował na MSBuild, jeśli to możliwe.

+0

Nigdy nie znalazłem sposobu, aby to zrobić. Aby być sprawiedliwym, MSBuild też nie rozwiązał problemu, chociaż ostatecznie przekonałem go do tego z innych powodów. W końcu, aby rozwiązać ten problem, musiałem napisać skrypt MS PowerShell, aby wykonać niezbędne wywołania, które potrzebowaliśmy przed rozpoczęciem budowy projektu. –

2

Chociaż jest to stare pytanie, istnieje metoda robienia tego, o co prosi; jest po prostu zawikłany, jak wszystko w plikach wsadowych!

Należy korzystać z połączonych mechanizmów polegających na tym, że importowane są zmienne środowiskowe i że preprocesor może wywoływać polecenia, a następnie wywoływać rekurencyjnie Makefile. Zakłada się, że Makefile jest nazywane Makefile (bez rozszerzenia, które jest domyślne).

!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) 

Tak, wiem, że jej straszne, ale nie pokazują, jak wykonać technikę, która może być wykonana z dowolnego polecenia powłoki, a nie tylko hostname.

Powiązane problemy