通过使用nmake文件附加系统时间来重命名.exe文件

时间:2019-02-06 10:16:34

标签: visual-c++ nmake

我想通过对nmake文件进行修改,以系统时间/本地时间重命名.exe文件。有人可以推荐有关nmake命令的书籍或参考吗? microsoft页面中提供的参考未涵盖我所寻找的内容...

1 个答案:

答案 0 :(得分:0)

以下makefile将起作用:

# Create the macro DATE_TIME from the environment variables %DATE% and %TIME%
!if [echo %DATE%_%TIME% > date_time.tmp] == 0
DATE_TIME = \
!include date_time.tmp       # get macro value from first line of temporary file
DATE_TIME = $(DATE_TIME::=+) # replace colons with "+"
DATE_TIME = $(DATE_TIME: =0) # replace spaces with "0"
!if [del date_time.tmp]      # clean up temporary file
!endif
!endif

foo.exe: bar

foo.exe:
    @echo Info: Building target $@ from $**, because $? is newer (or non-existent)
    @type nul > $@
    copy $@ "$*_$(DATE_TIME).exe"

bar:

输出为:

>nmake -nologo
Info: Building target foo.exe from bar, because bar is newer (or non-existent)
        copy foo.exe "foo_07-Feb-2019_21+08+48.11.exe"
        1 file(s) copied.

说明:环境变量%DATE%和%TIME%的不同之处在于,它们的值可以在每次查看时更改看来这导致他们与nmake的界面出现问题。作为一个小问题,%TIME%包含冒号,当然不能将其作为文件名的一部分。另外一个问题是,%DATE%和%TIME%的格式 不固定:它们可以取决于用户选择的内容。

给定的解决方案捕获临时文件中%DATE%和%TIME%的值,然后使用nmake!include宏设置为该文件第一行的值。然后将冒号替换为“ +”或您想要的任何内容。

有关问题,请参见Computed macro names

关于第二个问题,即如何找到“ nmake命令的书或参考书?”,请参阅我对Wildcard for files in sub-directory in NMAKE的回答。


更新#1:我的原始答案有效,但在上午10点之前在我的机器上创建了带空格的文件名。因此,答案已经更新以解决此问题。 (也许更好的解决方法是睡到早上10点!)


更新#2:另一种方法是不使用nmake宏,而仅使用环境变量。这比较短。 (最初,我被nmake的打印输出误导了。)

但是需要在%TIME%中进行两次替换,一次替换空格,另一次替换冒号,这增加了一些复杂性。需要调用call来延迟变量扩展。

以下生成文件:

foo.exe: bar

foo.exe:
    @echo Info: Building target $@ from $**, because $? is newer (or non-existent)
    @type nul > $@
    call set XXX=%%DATE%%_%%TIME: =0%%& call copy $@ "$*_%%XXX::=+%%.exe"

bar:

给予:

>nmake -nologo
Info: Building target foo.exe from bar, because bar is newer (or non-existent)
        call set XXX=%DATE%_%TIME: =0%& call copy foo.exe "foo_%XXX::=+%.exe"
        1 file(s) copied.

具有:

>dir /O-D
 Volume in drive C has no label.
 Volume Serial Number is xxxxxx

 Directory of C:xxxxxx

08-Feb-2019  08:19 AM    <DIR>          ..
08-Feb-2019  08:19 AM    <DIR>          .
08-Feb-2019  08:19 AM                 0 foo_08-Feb-2019_08+19+22.08.exe
08-Feb-2019  08:19 AM                 0 foo.exe
08-Feb-2019  08:18 AM               196 Makefile
               3 File(s)            196 bytes
               2 Dir(s)  12,517,236,736 bytes free