如何避免“make”重做库

如何避免“make”重做库

我有一个学校项目。在根目录中,我有 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 debug第二次做的时候,它不会重做.o,而是ar rcs每次都会重做。我想避免它,因为当我请求make -C ../lib其他 makefile 时,它​​们都会重新链接,因为库发生了变化(因为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

你需要再次恢复所有文件吗?还是只需要恢复所有文件?

相关内容