【问题标题】:Microsoft nmake: Is it possible to define macros from shell command output?Microsoft nmake:是否可以从 shell 命令输出定义宏?
【发布时间】:2015-01-08 19:00:26
【问题描述】:

我正在尝试将我的 SVN 修订信息保存到一个宏中,同时通过 Microsoft Visual Studio 的 nmake 制作我的代码。

在 GNU make 中,我执行以下操作:

SVN_REVISION=r$(shell svnversion -n)

所以我得到例如:SVN_REVISION=r10001

在 Microsoft nmake 中也可以这样做吗?

提前谢谢你。

【问题讨论】:

  • “NMAKE 继承了会话开始之前存在的环境变量的宏定义”。因此,您可以在调用 nmake 之前简单地定义它。以编程方式定义它的一种方式是通过for /f "usebackq",另一种方式可能是通过set /p。我没试过。看看吧。
  • @Alf 感谢您的回复。是的,你提到的方式是我目前的解决方案。我想知道在定义宏时是否可以在一个 Makefile 中做到这一点。我尝试过这样的事情:for /f %%i in ('svnversion -n') do set revision=r%%i,但它在 makefile 中无法正常工作:/
  • 你还需要"usebackq" 选项。批处理文件中的双百分号,交互式命令的单百分号。是不是很美妙。 :-D

标签: c++ visual-studio nmake


【解决方案1】:

使用提到的技术以及递归调用 make,可以这样做:

!IFNDEF MAKE
MAKE=NMAKE
!ENDIF
!IFNDEF SVN_REVISION
!   IF [echo off && FOR /F "usebackq" %i IN (`svnrevision -n`) DO  SET SVN_REVISION=%i && $(MAKE)      /$(MAKEFLAGS) /nologo /f $(MAKEDIR)\Makefile && exit /b  ] == 0
!     MESSAGE Make completed
!   ELSE
!     ERROR Error in nmake
!   ENDIF
!ELSE
# $(SVN_REVISION) now contains the string returned from the command `svnrevision -n`
!MESSAGE SVN_REVISION is $(SVN_REVISION)
#      Put the parts of the makefile that depend on SVN_REVISION here
!ENDIF
#
# To be a valid makefile it must have some rules to perform
all:
     @echo;$(SVN_REVISION)

【讨论】:

  • 你很聪明,而 nmake 不是。
猜你喜欢
  • 2019-07-05
  • 1970-01-01
  • 2011-06-20
  • 2019-11-15
  • 1970-01-01
  • 1970-01-01
  • 2015-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多