学校のプロジェクトがあります。ルートディレクトリには、それぞれ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
2回目にすると再実行されず、.o
毎回ar rcs
再実行されます。避けたいです。別のメイクファイルを要求したときにmake -C ../lib
ライブラリが変更されたため(ar
毎回実行されるため)、すべてが再リンクされるためです。
ベストアンサー1
あなたは図書館を確認していません。 1つの方法は交換することです。
pack: $(OBJ)
$(AR) $(ARFLAGS) $(NAME).a $(OBJ)
渡す
pack: $(NAME).a
$(NAME).a: $(OBJ)
$(AR) $(ARFLAGS) $(NAME.a) $(OBJ)
したがって、ライブラリが最新の状態では再作成されません。