ライブラリの再実行を防ぐ方法

ライブラリの再実行を防ぐ方法

学校のプロジェクトがあります。ルートディレクトリには、それぞれ3つの実行可能ファイルがあるため、makefileがある3つのサブディレクトリと1つのlibディレクトリがあります。このディレクトリには、マイライブラリソースファイル(*.c、、*.h)が含まれています。

私のlibdirにmakefileがあります。

##                                                                                                                                                                                                                  
## Makefile for corewar in /home/rihan_a/Projets/psu/corewar/lib                                                                                                                                                    
##                                                                                                                                                                                                                  
## Made by adnan rihan                                                                                                                                                                                              
## Login   <[email protected]>                                                                                                                                                                                    
##                                                                                                                                                                                                                  
## Started on  Fri Dec  9 09:28:07 2011 adnan rihan                                                                                                                                                                 
## Last update Fri Dec  9 10:45:27 2011 adnan rihan                                                                                                                                                                 
##                                                                                                                                                                                                                  

NAME=           libwar

SRC=            explode.c               \
                get.c                   \
                has_char.c              \
                int_to_bigendian.c      \
                my_die.c                \
                my_getnbr_t.c           \
                my_memset.c             \
                my_power_rec.c          \
                my_putstr.c             \
                my_strcat.c             \
                my_strcmp.c             \
                my_strlen.c             \
                my_strncpy.c            \
                my_strndup.c            \
                op.c                    \
                wt_len.c                \
                xmalloc.c

OBJ=            $(SRC:.c=.o)

ARFLAGS=        rcs
CFLAGS=         -Wall

all:            pack

obj_dbg:
                $(CC) -g -c $(SRC)

debug:          obj_dbg all

pack:           $(OBJ)
                $(AR) $(ARFLAGS) $(NAME).a $(OBJ)

clean:
                $(RM) $(OBJ)

fclean:         clean
                $(RM) $(NAME).a

私の問題は、私がこれを行うとき、makeすべてが大丈夫でmake debug大丈夫だということです。ただし、make debug2回目にすると再実行されず、.o毎回ar rcs再実行されます。避けたいです。別のメイクファイルを要求したときにmake -C ../libライブラリが変更されたため(ar毎回実行されるため)、すべてが再リンクされるためです。

ベストアンサー1

あなたは図書館を確認していません。 1つの方法は交換することです。

pack:           $(OBJ)
                $(AR) $(ARFLAGS) $(NAME).a $(OBJ)

渡す

pack: $(NAME).a

$(NAME).a: $(OBJ)
        $(AR) $(ARFLAGS) $(NAME.a) $(OBJ)

したがって、ライブラリが最新の状態では再作成されません。

おすすめ記事