5
1

More than 3 years have passed since last update.

Windows 版 GNU Make で PowerShell を使う方法

Last updated at Posted at 2021-01-08

はじめに

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 だけなので、msys2cygwinWSL ではオーバースペックすぎる。私は 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 は単体でも動くようなので、これだけ残しておく。
image.png

おまけ

gcc.exe と g++.exe は libwinpthread-1.dll に依存しているようなので、これらのコマンドを使いたい場合は

  • gcc.exe
  • g++.exe
  • libwinpthread-1.dll

をまとめて残しておく。
image.png
image.png

PATH を通す

環境変数の PATH に E:\Programs\bin\mingw64\bin を追加しておく。

Makefile の設定

set Powershell core as a default GNU Make shell on windows/linux を参考にして、SHELL と .SHELLFLAGS を設定した。

Makefile
# vi: set fileencoding=utf-8 noexpandtab :
SHELL       := powershell.exe
.SHELLFLAGS := -NoProfile -Command

all:
    Get-Date

実行結果
PS F:\Temp> make
Get-Date

202118 22:37:15


PS F:\Temp>

これで Windows でも make と PowerShell を使った自動化が捗るようになる。
めでたしめでたし。

余談

GNU Make の使い方は 「GNU Make 第3版 日本語版(オライリー)」の無料PDF で公開されている GNU Make 第3版 の無料書籍で勉強した。ありがたやありがたや。

参考 URL

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1