ページへ戻る

− Links

 印刷 

Makefile_app :: OSASK計画

osaskwiki:Makefile_app

ページ内コンテンツ
  • アプリケーション開発用Makefile例
  • win32用 (Linux用?)
  • Linux用
  • Linux用?
  • Makefileちょっぴり解説コーナー
  • こめんと欄

アプリケーション開発用Makefile例

  • introa12にバンドルする予定のもの
  • introa11版はバグがあったり、分割コンパイルにあまり向かなかったりしていた。
Page Top

win32用 (Linux用?)

  • CとASKAの混在にも対応。ライブラリ作成にも対応。DLL作成にも対応。
TARGET     = helloc4
STACKSIZE  = 4k
MALLOCSIZE = 1k
MMAREA     = 0
OBJS       = $(TARGET).obj

# 以上5つはソースごとに書き換える
# OBJSを書き換えると分割コンパイル対応

TOOLPATH =
INCPATH  = $(TOOLPATH).
RULEFILE = $(TOOLPATH)guigui00.rul
DLLRULE  = $(TOOLPATH)dllrule0.rul
MAKE     = $(TOOLPATH)make -r
SJISCONV = $(TOOLPATH)sjisconv -s
CC1      = $(TOOLPATH)cc1 -I$(INCPATH) -Os -quiet
GAS2NASK = $(TOOLPATH)gas2nask -a
NASK     = $(TOOLPATH)nask
OBJ2BIM  = $(TOOLPATH)obj2bim3
BIM2BIN  = $(TOOLPATH)bim2bin3
CPP0     = $(TOOLPATH)cpp0 -P -I$(INCPATH)
ASKA     = $(TOOLPATH)aska
NASKCNV  = $(TOOLPATH)naskcnv0 -l -s -w
GOLIB    = $(TOOLPATH)golib00w
DELE     = del

# 以上の項目はあなたのディレクトリ構成にあわせて書き換える

ALL :
    $(MAKE) $(TARGET).bin

%.ca : %.c Makefile
    $(SJISCONV) $*.c $*.ca

%.gas : %.ca Makefile
    $(CC1) -o $*.gas $*.ca

%.nas : %.gas Makefile
    $(GAS2NASK) $*.gas $*.nas

%.obj : %.nas Makefile
    $(NASK) $*.nas $*.obj

%.ias : %.ask Makefile
    $(CPP0) -o $*.ias $*.ask

%.3as : %.ias Makefile
    $(ASKA) $*.ias $*.3as

%.nas : %.3as Makefile
    $(NASKCNV) $*.3as $*.nas

%.lst : %.nas Makefile
    $(NASK) $*.nas $*.obj $*.lst

$(TARGET).bim : $(OBJS) Makefile
   $(OBJ2BIM) @$(RULEFILE) out:$(TARGET).bim stack:$(STACKSIZE) map:$(TARGET).map $(OBJS)

%.bin : %.bim Makefile
    $(BIM2BIN) in:$*.bim out:$*.org malloc:$(MALLOCSIZE) mmarea:$(MMAREA)
    $(BIM2BIN) -osacmp -tek0 in:$*.org out:$*.bin

$(TARGET).lib : $(OBJS) Makefile
    $(GOLIB) out:$(TARGET).lib $(OBJS)

$(TARGET).dll : $(OBJS) Makefile
    $(OBJ2BIM) @$(DLLRULE) out:$(TARGET).bim map:$(TARGET).map $(OBJS)
    $(BIM2BIN) -osacmp -tek0 in:$(TARGET).bim out:$(TARGET).dll

clean :
    $(DELE) *.obj
    $(DELE) $(TARGET).bim
    $(DELE) $(TARGET).map
    $(DELE) $(TARGET).org
  • (註)次の修正を加えるとLinux版になるかもしれない
SJISCONV = cp
CC1      = $(TOOLPATH)gocc1 -I$(INCPATH) -Os -quiet
CPP0     = $(TOOLPATH)gocpp0 -P -I$(INCPATH)
GOLIB    = $(TOOLPATH)golib00
DELE     = rm -f
Page Top

Linux用

  • (誰か書いてちょ)
  • (ひょっとしてdelをrmにするだけでいいのかな?)
  • introa11.lzhからintroe01.lzhをまとめてコンパイルするように修正した
    お手軽セットはこちら。
    introset-a2e[1]
  • ざっとしか見てませんが、こんな感じにすれば多少応用が楽になるかも?
Page Top

Linux用?

TARGET     = helloc4
STACKSIZE  = 4k
MALLOCSIZE = 1k
MMAREA     = 0
OBJS       = $(TARGET).obj

# 以上5つはソースごとに書き換える
# OBJSを書き換えると分割コンパイル対応
INCPATH  = .
RULEFILE = guigui00.rul
SJISCONV = ln
CC1      = gocc1
GAS2NASK = gas2nask
NASK     = nask
OBJ2BIM  = obj2bim3
BIM2BIN  = bim2bin3

MAKE     = make
DEL      = rm -f
# 以上の項目はあなたのディレクトリ構成にあわせて書き換える

ALL :
    $(MAKE) $(TARGET).bin

%.ca : %.c Makefile
    $(SJISCONV) -s $*.c $*.ca

%.gas : %.ca Makefile
    $(CC1) -I$(INCPATH) -Os -quiet -o $*.gas $*.ca

%.nas : %.gas Makefile
    $(GAS2NASK) -a $*.gas $*.nas

%.obj : %.nas Makefile
    $(NASK) $*.nas $*.obj

$(TARGET).bim : $(OBJS) Makefile
   $(OBJ2BIM) @$(RULEFILE) out:$(TARGET).bim stack:$(STACKSIZE) map:$(TARGET).map $(OBJS)

%.bin : %.bim Makefile
    $(BIM2BIN) in:$*.bim out:$*.org malloc:$(MALLOCSIZE) mmarea:$(MMAREA)
    $(BIM2BIN) in:$*.org out:$*.bin -osacmp -tek0

clean :
    $(DEL) $(TARGET).map
    $(DEL) $(TARGET).org
    $(DEL) $(TARGET).bin

う��ん・・・いまいち。なんか無理に書くほどのことじゃなかったような・・・・(^^;)

Page Top

Makefileちょっぴり解説コーナー

%.gas : %.ca Makefile
    $(CC1) -o $*.gas $*.ca
  • これは、拡張子.gasのファイルを作るには、同じ名前で拡張子が.caのものとMakefileが必要だよっていう意味で、2行目以降が作り方になっています。$*の部分が、%の部分を引き継ぎます。
  • makeは、最初のALL:を実行してmake helloc4.binを認識し、ああ、helloc4.binを何とかして作らなきゃいけないのね、と自分の任務を理解します。
  • Makefileには、拡張子.binを作るためには同じ名前で拡張子が.bimのものが必要、と書いてあります。そしてhello4.bimのためにはhelloc4.objが必要、とも書いてあります。・・・こんな感じで自動的にたどっていくわけです。
  • それで存在するファイルを見つけることができたら、そこから順番にコマンドを実行して、目的のファイルを作ってくれます。
Page Top

こめんと欄

  • 余談ですが、MakeファイルをWin・UNIX共通にするのは、ある規模よりも大きくなったら、スッパリあきらめるべきでしょうね。私も随分OSASKのMakeファイルをこねくりまわしましたが、結局は必要以上に複雑化してしまい読むのも大変になってしまうだけ。特にUNIX系はテキスト処理に優れているんですから、むしろ単純で読みやすいもののほうが結局手直しが楽って感じですねぇ・・・ -- hideyosi[2] 2003-09-23 (火) 09:18:05

Last-modified: 2009-11-17 (火) 00:00:00 (JST) (319d) by ゲスト