MinGW32-makeでビルド
DMDに付属してるmakeは機能が貧弱で使う気になりません。
ここは豊富な機能を誇る、MinGWのmakeを使ってみましょう。
MinGW / MSYSをインストールするとくっついてくるmakeコマンドですが、makeだけ引っ張ってきても使えますのでご安心あれ。
mingw32-makeのインストール
まずは肝心のmakeをダウンロードしましょう。
SourceForge.netのMinGWダウンロードページにありますが、ファイルが多すぎてナニがなんだかわからん場合は、以下のmingw32-make個別DLページでダウンロードしてください。
MinGW32-make (インストーラ版)
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 = . ./* ./*/* ./*/*/* # 以下、必要なだけ ./*/*/*... を繰り返す
関連記事
- PNG画像を自力で読む - 2010年3月31日 (水)
- 開発環境のインストール - 2010年3月1日 (月)
- D言語とはなんぞや? - 2010年3月1日 (月)
トラックバック
お手数をお掛け致します。
OBJ := $(subst /,\,$(SRC:.d=.obj))のところの
.d=.obj また、 .PHONY
此方には御座いませんが、-Wsll 3
の意味はどういうことでしょうか。
どの様な本を購入すれば、解説があるでしょうか。
御教授頂ければ助かります。