【问题标题】:how to get the output of a command when using Microsoft nmake?使用 Microsoft nmake 时如何获取命令的输出?
【发布时间】:2011-06-20 11:03:35
【问题描述】:

在 linux 上使用make,我们可以执行以下操作:

foo=$(shell /bin/bar)

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

但现在我手头有一个 Microsoft 项目,该项目已编译并与 Microsoft nmake.exe 链接。 nmake 是否有一个等效的东西可以让我运行命令并将输出分配给变量?

【问题讨论】:

    标签: makefile nmake


    【解决方案1】:

    虽然这是一个老问题,但有一种方法可以解决所问的问题;它只是令人费解,就像批处理文件中的所有内容一样!

    必须使用 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)
    

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

    【讨论】:

      【解决方案2】:

      我认为答案是“不”。没有等价物。

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

      【讨论】:

      • 我从来没有找到办法做到这一点。公平地说,MSBuild 也没有解决问题,尽管我最终出于其他原因转换为它。最后,为了解决这个问题,我最终不得不编写一些 MS PowerShell 脚本,以便在构建项目之前进行必要的调用。
      猜你喜欢
      • 2015-01-08
      • 1970-01-01
      • 2014-08-02
      • 1970-01-01
      • 2018-10-21
      • 2015-12-26
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多