2011-02-03 86 views
5

隨着make在Linux上,我們可以做這樣的事情:如何在使用Microsoft nmake時獲取命令的輸出?

foo=$(shell /bin/bar) 

它運行的命令bar和輸出分配給foo。這可以稍後通過引用$(foo)在makefile中使用。

但是現在我的微軟項目已經編譯並與微軟的nmake.exe鏈接。是否有一個nmake的等價物讓我可以運行一個命令並將輸出分配給一個變量?

回答

2

我認爲答案是「不」。沒有相應的東西。

我建議你儘可能轉換成MSBuild。

+0

我從來沒有找到辦法做到這一點。公平地說,MSBuild也沒有解決這個問題,儘管我最終因爲其他原因轉換了它。最後,爲了解決這個問題,我最終需要編寫一些MS PowerShell腳本,以便在構建項目之前完成必要的調用。 – 2011-03-11 04:59:15

2

儘管這是一個古老的問題,但有一種方法可以解決問題;它只是令人費解,就像批處理文件中的所有內容一樣!

必須使用導入環境變量和預處理器可以調用命令的事實的組合機制,然後遞歸調用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) 

是的,我知道它的可怕,但它確實演示瞭如何做技術,它可以與任何shell命令來完成,而不只是hostname

相關問題