はじめに
Windows 版 GNU Make をインストールしてデフォルト設定で実行すると、シェルがコマンドプロンプト (cmd.exe) で実行されてしまう。何とかして Windows PowerShell (powershell.exe) に変更できないか調べていたところ、set Powershell core as a default GNU Make shell on windows/linux にやり方が書いてあったのでやってみた。
PowerShell Core (pwsh.exe) にも変更できるらしい。(こちらは試していない)
環境
- GNU Make 4.2.1 (Mingw-w64)
- Windows Powershell 5.1.19041.610
補足
(2021/1/10 追記) 以下、GNU Make のインストール方法について色々書いたが、Chocolatey に make パッケージがあったので、choco install make -y
でインストールしたほうがたぶん早い。
Windows で動く GNU Make には何種類かあるが、GnuWin32 のものはバージョンが古すぎる。また、使いたいのは make だけなので、msys2 や cygwin や WSL ではオーバースペックすぎる。私は Windows で使うシェルは PowerShell がよいので、Mingw-w64 の Windows ネイティブで実行できる make を利用することにした。
また、私の環境には Git for Windows をインストールしているので、Linux ライクなコマンドが競合しないように make だけを選り分けて単体でインストールすることにした。混ぜるな危険 (msys2とCygwinとGit For Windowsを一緒に使ってはいけません) にも混ぜるなと書いてあることだし。
GNU Make のインストール
ダウンロード
Mingw-builds のダウンロードサイト から x86_64-posix-seh を選択してダウンロードする。
本記事作成時点 (2020/01/08) での最新版は x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z だった。
posix と seh の意味は MinGW-w64 を導入する によると下記の通り。
Thread : スレッドモデル。 posix か win32 のいずれかを選択する。 win32 は Windows ネイティブ関数を使っていて速いのだが C++ 11 以降の thread, mutex, future が使えなくなる。特に理由がないのであれば posix でいいだろう
Exception : 例外処理ハンドリング。アーキテクチャによって以下を選択できる。
(略)
x86_64
seh : Structured Exception Handling (Windows ネイティブ。おすすめ)
sjlj : SetJump/LongJump
インストール
ダウンロードしたアーカイブを適当なパスに解凍する。
ex) E:\Programs\bin\mingw64
GNU Make は mingw32-make.exe というファイル名になっているので、make.exe にリネームしておく。
make だけ選別する
E:\Programs\bin\mingw64\bin から残したいコマンドだけ残して削除(または退避)する。
*.exe は何かの *.dll に依存している可能性があるので、Dependencies とかで調べておく。
make.exe
make.exe は単体でも動くようなので、これだけ残しておく。
おまけ
gcc.exe と g++.exe は libwinpthread-1.dll に依存しているようなので、これらのコマンドを使いたい場合は
- gcc.exe
- g++.exe
- libwinpthread-1.dll
PATH を通す
環境変数の PATH に E:\Programs\bin\mingw64\bin を追加しておく。
Makefile の設定
set Powershell core as a default GNU Make shell on windows/linux を参考にして、SHELL と .SHELLFLAGS を設定した。
# vi: set fileencoding=utf-8 noexpandtab :
SHELL := powershell.exe
.SHELLFLAGS := -NoProfile -Command
all:
Get-Date
PS F:\Temp> make
Get-Date
2021年1月8日 22:37:15
PS F:\Temp>
これで Windows でも make と PowerShell を使った自動化が捗るようになる。
めでたしめでたし。
余談
GNU Make の使い方は 「GNU Make 第3版 日本語版(オライリー)」の無料PDF で公開されている GNU Make 第3版 の無料書籍で勉強した。ありがたやありがたや。