標準愚痴出力

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

Windows でポータブルな Makefile を書く(綺麗にとは言っていない)

nmake と GNU Make の非互換性が大きすぎるので、Windows でポータブルな Makefile を書くのは、簡単なものでないと無理だろうなぁと思ってた (ゆえに多くの場合は簡単なバッチファイルで用をたしていた)

が、「GNU make nmake」でググってみると…あるもんだなぁ

どうやら

  • nmake はコメント行の末尾の \ を認識しない ⇒ 次の行はコメントにならない
  • GNU Make はコメント行の末尾の \ を行継続文字として認識する ⇒ 次の行はコメントになる
  • nmake は !if ~ !else ~ !endif という条件文を認識する(GNU Make のは違う文法)

という違いを利用した技のようだ。これでマクロくらいは nmake と GNU Make で変えることが出来るようだ。ちょっと書いてみよう

# NMAKE code here \
!ifndef 0 # \
ECHO=echo #\
!else
# Make code here
ECHO=cmd /c echo
# \
!endif

all :
    $(ECHO) $(MAKE)

nmake は CMD.EXE をシェルとして呼び出すので、echo は内蔵コマンドとして呼べるが、GNU Make は sh を使おうとするので、echo.exe がパスにとっていなければ cmd.exe /c echo という形にしないといけない。実行結果は次のとおり:

$ nmake

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

        echo C:\Users\hymko\Share\bin\nmake.exe
C:\Users\hymko\Share\bin\nmake.exe
$ mingw32-make.exe
cmd /c echo C:/TDM-GCC-64/bin/mingw32-make
C:/TDM-GCC-64/bin/mingw32-make

お、おう…