自作システムのC言語sub以下をライブラリ化
自作システムのエンジン部分はC言語で分割ファイル活用してちょっとだけ本格的に構築してる(グダグダですが)
で個別のsubファイルは
suQ2/main/sub に入ってて、そのフォルダでmake一発でオブジェクトファイルにコンパイルできる
しかし、機能UPよりオブジェクトが増えてくるとそれをmainコンパイルshellスクリプトでコンパイルするんだが、増えたオブジェクトファイル名をいちいち書き足さないといけなかった
折角なので ar を使ってライブラリ化してみた
suQ2/main/sub/makefile
# Makefile_other # プログラム名とオブジェクトファイル名 PROGRAM = main OBJS = read_kd.o read_kd0.o check0.o read_kd2.o matome.o sngrx.o common_y.o output.o bnkt.o dump.o import.o # 定義済みマクロの再定義 CC = gcc #CFLAGS = -Wall -O2 CFLAGS = -O2 AR = ar ARFLAG = crsv LFILE = libSucar.a # サフィックスルール適用対象の拡張子の定義 .SUFFIXES: .c .o # プライマリターゲット $(PROGRAM): $(OBJS) #$(CC) -o $(PROGRAM) $^ ls -l $(OBJS) $(AR) $(ARFLAG) $(LFILE) $(OBJS) @echo "libSucar.a make success" # サフィックスルール .c.o: $(CC) $(CFLAGS) -c $< # ファイル削除用ターゲット .PHONY: clean clean: $(RM) $(OBJS) # ヘッダファイルの依存関係 read_kd.o: check0.h read_kd.h env.h read_kd0.o: check0.h read_kd0.h env.h read_kd2.o: check0.h read_kd2.h env.h cheack0.o: check0.h env.h matome.o: matome.h env.h sngrx.o: sngrx.h env.h common_y.o: sngrx.h env.h common_y.h output.o: sngrx.h env.h common_y.h output.h bnkt.o: env.h bnkt.h dump.o: env.h dump.h import.o: env.h import.h
ここを参考にさせていただきました
suQ2/main/mk_MAIN_
MAIN=`cat _MAIN_` echo mk_MAIN_ '('${MAIN}')' gcc -c ${MAIN}.c -o simxp8trsu_nobug2.o echo compile and link Sucar.a gcc simxp8trsu_nobug2.o -L./sub -lSucar -o simxp8trsu_nobug2.exe exit
でうまく行った