53歳限界プログラマの憂鬱

SU/CAR-ST-APplication-cellsから派生したプログラマのブログ

来訪ありがとうございます
シストレツールを自作してました
自分用の記事が多いのであまり役には立たないブログでした

f:id:sucar:20150414193802p:plain

自作システム詳細目次

自作システムの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

ここを参考にさせていただきました

programmer-toy-box.sblo.jp

コンパイルスクリプトの方は

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

でうまく行った