不良少年 » プログラミング »

MinGW32-makeでビルド

Atom RSS

MinGW32-makeでビルド

 DMDに付属してるmakeは機能が貧弱で使う気になりません。
 ここは豊富な機能を誇る、MinGWのmakeを使ってみましょう。
 MinGW / MSYSをインストールするとくっついてくるmakeコマンドですが、makeだけ引っ張ってきても使えますのでご安心あれ。

mingw32-makeのインストール

 まずは肝心のmakeをダウンロードしましょう。
 SourceForge.netのMinGWダウンロードページにありますが、ファイルが多すぎてナニがなんだかわからん場合は、以下のmingw32-make個別DLページでダウンロードしてください。

MinGW32-make (インストーラ版)

http://sourceforge.net/projects/mingw/files/MinGW%20make/mingw32-make-3.80-3/mingw32-make-3.80.0-3.exe/download

 2~3秒待つとダウンロードが始まりますので、適当なフォルダに保存後、ダブルクリックでインストールされます。
 インストール先はどこでも構いませんが、インストール後にパスの通ったフォルダ(パスを設定するのが面倒くさければ「C:\DevTools\dmd\bin」でも可)にコピーして、「make.exe」とリネームしてください。

Makefile

 MinGWのmakeはちゃんとwildcardやaddsuffixが使えるので、いちいちMakefileにソースファイルを指定しなくてもコンパイルできます。
 以下のようなMakefileを書いてソースファイルと同じフォルダに置いておけば、コマンドプロンプトで「make」と打つだけで実行ファイルのできあがり。
 (Makefileのファイル名を「Makefile」以外にした場合は、「make -f ファイル名」)

Makefile

 sample.exe の部分は、実際に作りたい実行ファイルのファイル名に置き換えてください。

########################################################
# Makefile for DMD
# Uses GNU Make-specific extensions
#


########################################################
# Build target
#

# ターゲットファイル (生成する exe ファイル)
TARGET = sample.exe

########################################################
# Command settings
#

# D Compiler
DC = dmd

# Remove command
RM = del

########################################################
# dmd コンパイルオプションの設定
#

# 追加のインクルードパス
DFLAGS =

# リリース時のコンパイルオプション
DFLAGS += -O -release -inline

# デバッグ時のコンパイルオプション
#DFLAGS += -g -d -debug -unittest -w

########################################################
# リンカオプションの設定
#

# 追加のライブラリ
#
#   kernel32.lib と user32.lib, phobos.lib, snn.lib 以外は
#   自動でリンクされないので、ここで追加してください。
#
LFLAGS = 

# GUI アプリケーションをコンパイルする際のリンカオプション
#
#   真っ黒なコマンドプロンプトが出てきてイヤーンな人は、
#   以下のコメントを外してください。
#
#LFLAGS += -L/exet:nt/su:windows:4.0

########################################################
# コンパイルするソースファイルのあるディレクトリ
#
#   ワイルドカード (*) も使えます。
#   この例では、カレントディレクトリにある、すべてのD言語
#   ソースファイルをコンパイルします。
#
INCLUDES = .

########################################################
# 除外するファイル
#
#   ワイルドカード (*) も使えます。
#   ここで指定されたファイルはコンパイルされません。
#   テスト用のソースファイルなどはここで指定してください。
#
EXCLUDES = ./test.d

########################################################
# ソースファイルの検索 / 除外
#
SRC := $(wildcard $(addsuffix /*.d, $(INCLUDES)))
SRC := $(filter-out $(wildcard $(EXCLUDES)), $(SRC))

# dmd のリンカが '/' を通さないので、'\' に変換
OBJ := $(subst /,\,$(SRC:.d=.obj))

# *.map ファイル
MAP := $(TARGET:.exe=.map)

########################################################
# サフィックスルール
#

# *.d ファイルから *.obj ファイルを生成 (コンパイル)
.SUFFIXES: .d .obj

.d.obj:
	$(DC) -c -of$@ $(DFLAGS) $<

########################################################
# make ビルドルール
#

# all (default target)
.PHONY: all
all: $(TARGET)

# clean: 生成したすべてのターゲット (*.obj, *.map, *.exe) を削除
.PHONY: clean
clean:
	-$(RM) $(TARGET)
	-$(RM) $(MAP)
	-$(RM) $(OBJ)

# ターゲットファイル: *.exe ファイルのビルド
$(TARGET): $(OBJ)
	$(DC) -of$@ $(DFLAGS) $(LFLAGS) $^

 ソースファイルがサブフォルダにも置かれてる場合は、「INCLUDES」の行を以下のように変更してください。

########################################################
# コンパイルするソースファイルのあるディレクトリ
#
#   ワイルドカード (*) も使えます。
#   この例では、カレントディレクトリにある、すべてのD言語
#   ソースファイルをコンパイルします。
#
INCLUDES = . ./* ./*/* ./*/*/* # 以下、必要なだけ ./*/*/*... を繰り返す

関連記事

トラックバック

コメント

comment java c ski さん - 2011年10月28日 (金) 22:38:10

お手数をお掛け致します。
OBJ := $(subst /,\,$(SRC:.d=.obj))のところの
.d=.obj また、 .PHONY
此方には御座いませんが、-Wsll 3
の意味はどういうことでしょうか。
どの様な本を購入すれば、解説があるでしょうか。

御教授頂ければ助かります。

comment nanashi さん - 2014年2月20日 (木) 11:08:32

直リンクの場所が変わったみたいですね
http://sourceforge.net/projects/mingw/files/MinGW/Extension/make/mingw32-make-3.80-3/mingw32-make-3.80.0-3.exe/download

コメント投稿フォーム

※ スパム防止の為、コメント内に2個以上のリンクがあった場合、サイト管理者 (かのう神路) が承認するまで表示されません。

ページの先頭に戻る