gccコンパイル:いくつかパッケージする.o和.aファイルは新しいです.aファイル
シーンを使用:
gccがcppをコンパイルときに生成する.o,それから若干.oファイルはパッケージ生成する.aファイル
しかし、时には必要です.oと複数.a,パッケージ生成最終の1つ.aファイル
*.o --------\
xxx.a ---------> des.a
bbb.a ------/
gccコンパイル:いくつかパッケージする.o和.aファイルは新しいです.aファイル
方法:
gccがcppをコンパイルときに生成する.o,それから若干.oファイルはパッケージ生成する.aファイル
しかし、时には必要です.oと複数.a,パッケージ生成最終の1つ.aファイル
*.o --------\
xxx.a ---------> des.a
bbb.a ------/
gccコンパイル:いくつかパッケージする.o和.aファイルは新しいです.aファイル
方法:
, rebuild_archive.sh, Makefile , :
sh ./rebuild_archive.sh .a .a ,,.... .o,,,,,
sh ./rebuild_archive.sh libdes.a libda_frame.a libda_dso_dll.a_da.o libda_dso_dll.a_daconf.o libda_dso_dll.a_damain.o
#!/bin/sh
# Usage: sh rebuild_archive.sh guo.a libda.sf_dll.a da_version.o
if [ "$#" -lt "1" ]; then
echo "param error for archive rebuild.sh"
fi
#
PARAM_STR=$*
#
TARGET=$1
TARGETTMPDIR=$TARGET.rebuild_archive
ARMACTEMPOBJ=$TARGET.rebuild_archive.ar.mac
test -d $TARGETTMPDIR && (echo "[FATAL]: some process running for $TARGET" && exit 0)
test -d $TARGETTMPDIR.2nd && (echo "[FATAL]: some process running for $TARGET" && exit 0)
rm -rf $TARGETTMPDIR
rm -rf $TARGETTMPDIR.2nd
mkdir -p $TARGETTMPDIR
mkdir -p $TARGETTMPDIR.2nd
echo OPEN ${TARGET} > $TARGETTMPDIR/$ARMACTEMPOBJ
for line in ${PARAM_STR#* }
do
SUFFIX=`echo ${line:0-2}`
# .a, .o
if [ "$SUFFIX" = ".a" ];then
#echo "this is .a : $line, extract it to tmpdir"
echo ADDLIB $line >> $TARGETTMPDIR/$ARMACTEMPOBJ
fi
# .o, cp
if [ "$SUFFIX" = ".o" ];then
#echo "this is .o : $line, copy it to tmpdir"
cp -f $line $TARGETTMPDIR || exit $?
fi
#
# ignore other file types
done
echo SAVE >> $TARGETTMPDIR/$ARMACTEMPOBJ
echo END >> $TARGETTMPDIR/$ARMACTEMPOBJ
#
OOO_NUM=`ls ${TARGETTMPDIR}/*.o | wc -l`
if [ "$OOO_NUM" -gt "0" ];then
cd ${TARGETTMPDIR} && ar crs ../${TARGET} ./*.o && cd - && ar -M < $TARGETTMPDIR/$ARMACTEMPOBJ || exit $?
else
sed -i 's/OPEN/CREATE /g' $TARGETTMPDIR/$ARMACTEMPOBJ
ar -M < $TARGETTMPDIR/$ARMACTEMPOBJ || exit $?
fi
rm -rf $TARGETTMPDIR
rm -rf $TARGETTMPDIR.2nd