라이브러리를 다시 실행하는 것을 방지하는 방법

라이브러리를 다시 실행하는 것을 방지하는 방법

학교 프로젝트가 있어요. 루트 디렉터리에는 각각 makefile(3개의 실행 파일이 있기 때문에)이 있는 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 debug두 번째로 하면 다시 실행되지 않고 .o매번 ar rcs다시 실행됩니다. 나는 그것을 피하고 싶습니다. 다른 메이크파일을 요청할 때 make -C ../lib라이브러리가 변경되었기 때문에( ar매번 실행되기 때문에) 모두 다시 링크되기 때문입니다.

답변1

당신은 도서관을 확인하지 않았습니다. 한 가지 방법은 교체하는 것입니다.

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

통과

pack: $(NAME).a

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

따라서 라이브러리가 최신 상태라면 다시 만들어지지 않습니다.

답변2

debug:          obj_dbg all

모든 파일을 다시 복구해야 합니까? 아니면 모든 파일을 복원해야 합니까?

관련 정보