mingw32-make.exe
MinGW でインストール可能な GNU Make。フルセットなので、一般によく読まれる make の解説記事どおりの Makefile を利用することができる。
問題としてはコマンド名が長くて、シェルでコマンド名を補完しようとすると mingw-get-setup.exe
が邪魔で、最低 mingw3
とまで打たなくてはいけない。
UNIX系なのでドライブレター系パスの認識が懸念されるが、Makefile ではフルパスを使うことはないので心配する必要はないだろう
コマンドラインの解釈に CMD.EXE を使いたい時は明示的に SHELL:=CMD.EXE
と書いておくのが安全だ。
nmake.exe
Visual Studio に入ってくる
- 通常は Visual Studio Command Prompt の中からでないと PATH が通っていない場所にある (
vcvarsall.bat
などで PATH が通る) - 他の make と互換性のない独自拡張文法が多い
- 実は Undocumented な拡張がある:SETコマンドが nmake 内蔵処理となっている
- 設定された環境変数の値が次の行まで継続する
- CMD.EXE のような
SET "FOO=BAR"
のような記述ができない
- 実は Undocumented な拡張がある:SETコマンドが nmake 内蔵処理となっている
- 添付元の Visual Studio の VC++ のランタイムが必要(例:MSVCR100.DLL 、 VCRUNTIME140.DLL など…)
scoop でインストールできる make.exe
2021/05/15 現在、scoop install make
を実行すると、make-4.3-without-guile-w32-bin.zip
というパッケージがインストールされる。普通に GNU Make のようだ。一番、無難な make といえる。
どの make でも触りなく動作する Makefile を書くには?
検索したが、世の中 GNU make がほぼ標準扱いで、そういった資料はなかなかないが、「make posix」で検索するとかろうじて英語系のページが見つかる。
とりあえず、共通する特殊マクロをリストアップしてみたが、道はなかなか険しそうだ(ここで自分は諦めた)
特殊マクロ
機能 | POSIX | nmake | 備考 |
---|---|---|---|
$@ |
OK | OK | ターゲットファイル名 |
$? |
OK | OK | ターゲットファイルよりも新しい依存ファイルのリスト |
$* |
OK※ | OK | 拡張子をのぞいたターゲットファイル名(※推論規則のコマンドでのみ有効な場合がある) |
$% |
OK | - | ターゲットがライブラリファイル(*.a )の時にそのメンバー |
$< |
OK | - | 依存ファイル(推論規則のコマンドでのみ有効) |
$** |
- | OK | すべての依存ファイル |