cc65にはライブラリアンであるar65も同梱されていますので、別プロジェクトでも使えそうな関数をまとめてライブラリ化することができます。
以前のMakefileを改造して、お手軽に自作ライブラリを作れるようにします。
-
ファイルの配置は下記の通りです。
nesapp/ ... 作業用のディレクトリ │setenv.bat(.sh) ... 環境変数設定用のバッチファイル(スクリプト) │ └─libbase/ ... プロジェクト用のディレクトリ(ライブラリファイル名と同じ) │Makefile ... ビルド用のメイクファイル │ ├─include/ ... ライブラリのヘッダーファイル用のディレクトリ │ ├─lib/ ... ライブラリ用のディレクトリ │ └─src/ ... ソースプログラム用のディレクトリ
include内には公開用のヘッダファイルを格納します。
lib内にはビルドしてできたライブラリファイルが格納されます。
src内にはこれまで通り、プログラムを格納します。 -
改造方針は、以下の通り。
- コンパイルまでは通常通り
- 最後にリンカーのld65ではなく、ライブラリアンのar65でライブラリ化
PROJECT := $(shell basename $(CURDIR)) LIB_DIR := lib SRC_DIR := src OBJ_DIR := obj TARGET := $(LIB_DIR)/$(PROJECT).lib CFILES := $(wildcard $(SRC_DIR)/*.c) SFILES := $(wildcard $(SRC_DIR)/*.s) $(wildcard $(SRC_DIR)/*.asm) OBJS := \ $(foreach file, $(CFILES), $(OBJ_DIR)/$(basename $(notdir $(file))).o) \ $(foreach file, $(SFILES), $(OBJ_DIR)/$(basename $(notdir $(file))).o) DEPENDS := $(wildcard $(OBJ_DIR)/*.dep) AS_INCDIR := $(CC65_HOME)/asminc CC_INCDIR := $(CC65_HOME)/include ASFLAGS := -t none -I $(AS_INCDIR) -I $(CURDIR)/include CFLAGS := -t none -Or -Os -I $(CC_INCDIR) -I $(CURDIR)/include ARFLAGS := CC := cl65 AS := cl65 AR := ar65 RM := rm -rf MKDIR := mkdir $(OBJ_DIR)/%.o: $(SRC_DIR)/%.c $(CC) $(CFLAGS) --create-dep $@.dep -c -o $@ $< $(OBJ_DIR)/%.o: $(SRC_DIR)/%.s $(AS) $(ASFLAGS) --create-dep $@.dep -c -o $@ $< $(OBJ_DIR)/%.o: $(SRC_DIR)/%.asm $(AS) $(ASFLAGS) --create-dep $@.dep -c -o $@ $< .PHONY: all all: init $(TARGET) .PHONY: clean clean: - $(RM) $(LIB_DIR) - $(RM) $(OBJ_DIR) .PHONY: init init: @$(if $(shell ls | grep $(LIB_DIR)) , , $(MKDIR) $(LIB_DIR)) @$(if $(shell ls | grep $(OBJ_DIR)) , , $(MKDIR) $(OBJ_DIR)) $(TARGET): $(OBJS) @ echo Create $@ @ $(RM) $@ $(AR) $(ARFLAGS) a $@ $(OBJS) @ echo Done. -include $(DEPENDS)
ライブラリアンの機能には追加以外にもありますが、今回の使い方では必ず新規作成するだけのお手軽な使い方となっています…
-
上記までのファイルをまとめたものはこちら。
- nesapp-libbase.zip「ライブラリ作成」のベースプロジェクト
-
以下は、ベースプロジェクト上でcc65@wiki様の「kihon.h」をライブラリ化してみたサンプルです。
オリジナルを基にプロトタイプ宣言と関数を分けています。
動作確認用のプロジェクトは、「kihon.h」の一部の関数を使ってスプライトを64個表示しています。
- nesapp-libkihon.zip「ライブラリ本体」
- nesapp-test_libkihon.zip「ライブラリの動作確認用プロジェクト」
-
参考: