隨着make
在Linux上,我們可以做這樣的事情:如何在使用Microsoft nmake時獲取命令的輸出?
foo=$(shell /bin/bar)
它運行的命令bar
和輸出分配給foo
。這可以稍後通過引用$(foo)
在makefile中使用。
但是現在我的微軟項目已經編譯並與微軟的nmake.exe
鏈接。是否有一個nmake的等價物讓我可以運行一個命令並將輸出分配給一個變量?
隨着make
在Linux上,我們可以做這樣的事情:如何在使用Microsoft nmake時獲取命令的輸出?
foo=$(shell /bin/bar)
它運行的命令bar
和輸出分配給foo
。這可以稍後通過引用$(foo)
在makefile中使用。
但是現在我的微軟項目已經編譯並與微軟的nmake.exe
鏈接。是否有一個nmake的等價物讓我可以運行一個命令並將輸出分配給一個變量?
我認爲答案是「不」。沒有相應的東西。
我建議你儘可能轉換成MSBuild。
儘管這是一個古老的問題,但有一種方法可以解決問題;它只是令人費解,就像批處理文件中的所有內容一樣!
必須使用導入環境變量和預處理器可以調用命令的事實的組合機制,然後遞歸調用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
。
我從來沒有找到辦法做到這一點。公平地說,MSBuild也沒有解決這個問題,儘管我最終因爲其他原因轉換了它。最後,爲了解決這個問題,我最終需要編寫一些MS PowerShell腳本,以便在構建項目之前完成必要的調用。 – 2011-03-11 04:59:15