これまでGNU makeとMakefileの使い方を取り上げてきた。前回はこの機能がWindowsでも利用できることを説明し、その例としてWindowsにMSYS2をインストールした状態でMakefileを使うサンプルを取り上げた。今回はWindowsで利用するLinuxの例としてMSYS2ではなくWSLを使う方法を取り上げる。
WSL登場後のWindowsとLinux
WindowsにWSLが登場する以前はMSYS2といったソフトウエアをインストールすることでWindowsでLinuxのコマンド群を利用することができた。似たようなソフトウエアはいくつかある。例えば、「MSYS2」は「pacman」というツールでLinuxコマンドのインストールを行うことができ、便利なものの一つだ。
MicrosoftがWSLをデフォルトの機能としてWindowsに導入したことで状況が変わった。WindowsではUbuntuをインストールして使うというのがデフォルトの機能として提供されるようになった。今後はこの機能を使ってWindowsでLinuxを使うという方法を選択肢の1つとして検討するのが当然になってくる。
WSL(現在はWSL2)は仮想環境でLinuxカーネルを動作させるものなので、Linuxカーネル互換性は100%だ。ただし、仮想環境で動作しているのでWindowsとの親和性に若干の弱さがある。Windowsのバイナリとして実行されるMSYS2に比べるとWindowsとのなじみが弱い。
例えば、前回使ったMakefileはWindowsのWSL (Ubuntu)ではそのままだと動かない。今後はWSLを使うケースが増えることが予測されるので、今回は前回のMakefileをWSL向けに書き換える方法を取り上げる。
Windows (MSYS2)で動かすMakefile
まず、前回の成果物をおさらいだ。経理処理(売上関係)の作業手順をMakefileにまとめた。ファイルとディレクトリを次のように配置した。
$ tree 経理処理(売上関係)
経理処理(売上関係)
├── Makefile
├── mk
│ └── base.mk
└── templates
├── mailbody
└── Makefile
2 directories, 4 files
$
◆経理処理(売上関係)/Makefile
all: clean
#========================================================================
# 新規作業ディレクトリのセットアップ
#========================================================================
add:
dir=$$(date +%Y%m%d); \
\
if [ ! -e $${dir} ]; \
then \
mkdir -p $${dir}; \
cp templates/Makefile \
$${dir}/; \
fi
#========================================================================
# クリーンナップ
#========================================================================
clean:
for i in 20*; \
do \
cd $${i}; \
make clean; \
cd ..; \
done
◆経理処理(売上関係)/templates/Makefile
include ./../mk/base.mk
◆経理処理(売上関係)/mk/base.mk
#========================================================================
# ディレクトリに記述されている日付
#========================================================================
date=$(notdir $(shell pwd))
#========================================================================
# 使用するアプリケーション
#========================================================================
ecl="C:\Program Files\Microsoft Office\root\Office16\ecl.EXE"
mail="mail.ps1"
#========================================================================
# POSから売上データを取得
#========================================================================
fetch:
scp postdata:~/sales/$(date)/sales.csv \
./
#========================================================================
# 売上データの処理および編集アプリケーションの起動
#========================================================================
edit:
prog1 sales.csv
$(ecl) sales.csv
cp sales.csv \
C:\\Users\\$(USERNAME)\\Desktop\\売上報告書.csv
#========================================================================
# 売上データの処理および編集アプリケーションの起動
#========================================================================
report:
mail.ps1 \
-To 報告先メールアドレス \
-Cc CCメールアドレス \
-Subject 【日報】$(date)締め売上関連データ報告書 \
-Attachment C:\\Users\\$(USERNAME)\\Desktop\\売上報告書.csv \
-BodyFromFile ./../templates/mailbody
clean:
不要なデータの削除処理
MSYS2のようなソフトウエアを使うと、MakefileからWindowsのアプリケーションも起動できるので便利だ。WSLでも同じことはできるのだが、少々書き換えが必要になる。