Como evitar “fazer” refazer uma biblioteca

1

Eu tenho um projeto para a escola. No diretório raiz, eu tenho 3 subdiretórios, todos com um makefile (porque haverá 3 arquivos executáveis), e há um diretório lib. Este diretório contém meus arquivos de origem da biblioteca ( *.c , *.h ).

Eu tenho um makefile na libdir:

##                                                                                                                                                                                                                  
## 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

Meu problema é quando eu faço make , tudo está ok, e para make debug também. Mas quando eu faço make debug uma segunda vez, ele não refaz o .o , mas faz o ar rcs everytime. Eu quero evitá-lo, porque quando eu solicito make -C ../lib para os outros makefiles, todos eles são revinculados porque a lib mudou (porque ar foi executado toda vez).

    
por Max13 09.12.2011 / 10:54

2 respostas

3

Você não tem verificação na biblioteca. Uma maneira seria substituir

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

por

pack: $(NAME).a

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

para que a biblioteca não seja refeita se estiver atualizada.

    
por 09.12.2011 / 11:22
0
debug:          obj_dbg all

Você precisa de tudo de novo lá? ou apenas todos?

    
por 09.12.2011 / 10:58