【发布时间】:2017-11-21 06:17:10
【问题描述】:
这是我的 Makefile:
NAME = fillit
FLAGS = -Wall -Wextra -Werror
LIB_NAME = libft.a
LIB_DIR = ../libft/
LIB_PATH = $(LIB_DIR)$(LIB_NAME)
OBJ_DIR_NAME = objects
OBJ_DIR = $(OBJ_DIR_NAME)/
HEADER_DIR = ../libft
SRC = main.c
OBJ = $(SRC:.c=.o)
all :
mkdir -p $(OBJ_DIR_NAME)
$(MAKE) $(NAME)
$(NAME) : $(OBJ) $(LIB_PATH)
gcc -o $(NAME) $(addprefix $(OBJ_DIR), $(OBJ)) -L$(LIB_DIR) -lft
$(LIB_PATH) : $(LIB_PATH)
$(MAKE) -C $(LIB_DIR) --no-print-directory
%.o : %.c
gcc $(FLAGS) -I$(HEADER_DIR) -c $<
mv $@ $(OBJ_DIR)
clean :
rm -f $(addprefix $(OBJ_DIR), $(OBJ))
rm -rvf $(OBJ_DIR_NAME)
fclean : clean
rm -f $(NAME)
rm -f $(addprefix $(LIB_DIR), $(LIB_NAME))
re: fclean
make
当我写$(LIB_PATH) : $(LIB_PATH) 时,我希望我的 Makefile 检查我的 lib 是否已更新或存在,如果不是,请编译它(如对象和源),但当我这样做时,它只会争论循环规则和无论如何编译我的库。
那么,我做make的时候应该写什么,只有在我的库还没有编译的时候才进入$(LIB_PATH):?
【问题讨论】:
-
你不应该有类似
mylib.a: $(OBJECTS)的东西吗? (或指定mylib的绝对路径)
标签: c makefile static-libraries