如何在使用Microsoft nmake时获取命令的输出?

Sté*_*ane 6 nmake makefile

随着makeLinux上,我们可以做这样的事情:

foo=$(shell /bin/bar)
Run Code Online (Sandbox Code Playgroud)

它运行命令bar并将输出分配给foo.稍后可以通过引用在makefile中使用它$(foo).

但是现在我手上有一个Microsoft项目,它与Microsoft编译并链接在一起nmake.exe.nmake是否有相同的功能可以让我运行命令并将输出分配给变量?

Bri*_*汤莱恩 5

虽然这是一个老问题,但有一种方法可以做到所要求的;它只是很复杂,就像批处理文件中的所有内容一样!

人们必须使用 make 导入环境变量和预处理器可以调用命令的组合机制,然后递归地调用 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)
Run Code Online (Sandbox Code Playgroud)

是的,我知道这很可怕,但它确实演示了如何执行该技术,该技术可以使用任何 shell 命令来完成,而不仅仅是hostname.


Che*_*eso 1

我想答案是“不”。没有同等的。

如果可能的话,我建议您转换为 MSBuild。