Libraries
如何避免“製作”重做圖書館
我有一個學校項目。在根目錄中,我有 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
你還需要那裡嗎?還是全部?