標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

nmake と set

nmake では set は CMD.EXE ではなく、nmake 自身の組み込みコマンドらしい

test:
  set foo=ahaha
  echo %%foo%%

% は nmake用の Makefile ではファイル指定子であるため、2つ重ねなくてはいけない

$ nmake

Microsoft (R) Program Maintenance Utility Version 10.00.30319.01
Copyright (C) Microsoft Corporation.  All rights reserved.

        set foo=ahaha
        echo %foo%
ahaha

二重引用符の扱いについて、CMD.EXE との互換性はない

test:
  set "foo=ahaha"
  echo %%foo%%
  echo %%"foo%%
$ nmake

Microsoft (R) Program Maintenance Utility Version 10.00.30319.01
Copyright (C) Microsoft Corporation.  All rights reserved.

        set "foo=ahaha"
        echo %foo%
%foo%
        echo %"foo%
ahaha"

CMD.EXE の set を呼ぶには丸括弧で囲めば良い

test1:
  set GOOS=linux & go env GOOS

test2:
  ( set "GOOS=linux" & go env GOOS )
$ nmake test1

Microsoft (R) Program Maintenance Utility Version 10.00.30319.01
Copyright (C) Microsoft Corporation.  All rights reserved.                                                                                                                                  set GOOS=linux & go env GOOS
$ nmake test2

Microsoft (R) Program Maintenance Utility Version 10.00.30319.01
Copyright (C) Microsoft Corporation.  All rights reserved.                                                                                                                                  ( set "GOOS=linux" & go env GOOS )
linux