학교 프로젝트가 있어요. 루트 디렉터리에는 각각 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
모든 파일을 다시 복구해야 합니까? 아니면 모든 파일을 복원해야 합니까?