我有一个学校项目。在根目录中,我有 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
你需要再次恢复所有文件吗?还是只需要恢复所有文件?