Muni Bus

パソコンの操作方法や設定方法を忘れないようにメモしています。ブログを一回引っ越ししているので、所々表示がかなり乱れています・・・

【make】Windowsで複数のフォルダーに置かれたファイルを参照する

例えば、以下のようにmakefileの置いてあるサブフォルダーにあるファイルを参照してコンパイルをするために、以下のようなmakefileでmakeをしてみる。

VPATH = src include
SOURCES = main.vb sub.vb
exe.exe: $(SOURCES)
vbc /out:$@ $^

makeを実行する。

PS > make
vbc /out:exe.exe src/main.vb include/sub.vb
Microsoft (R) Visual Basic Compiler version ○.○.○
(表示省略)
vbc : error BC30420: 'Sub Main' が、'exe' に見つかりませんでした。
○:\○○\main.vb : error BC31007: モジュール ファイル '○:\○○\main.vb' を開けません: 指定されたファイルが見つかりません。
○:\○○\sub.vb : error BC31007: モジュール ファイル '○:\○○\sub.vb' を開けません: 指定されたファイルが見つかりません。

失敗する。これは、Windows(ウィンドウズ)ではパスの区切り文字が「¥」(円マーク)だが、makeはUNIX(あるいはLinux)と同じように「/」(スラッシュ)でコンパイラーに渡したことによる。そのため、subst関数を使用して、「/」をパスの区切り文字を「¥」(円マーク)に置換する。

VPATH = src include
SOURCES = main.vb sub.vb
exe.exe: $(SOURCES)
vbc /out:$@ $(subst /,\,$^)