Libraries

如何避免“製作”重做圖書館

  • December 10, 2011

我有一個學校項目。在根目錄中,我有 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   <rihan_a@epitech.net>                                                                                                                                                                                    
##                                                                                                                                                                                                                  
## 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 時,它們都重新連結,因為 lib 發生了變化(因為ar每次都執行)。

你沒有檢查圖書館。一種方法是更換

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

經過

pack: $(NAME).a

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

所以如果圖書館是最新的,就不會重新製作。

debug:          obj_dbg all

你還需要那裡嗎?還是全部?

引用自:https://unix.stackexchange.com/questions/26409