我的makefile总是重建,不明白为什么。。
这里是:
SRC = $(DIR)/my_getnbr.c \
$(DIR)/my_isneg.c \
$(DIR)/my_putchar.c \
OBJ = $(SRC:.c=.o)
DIR = lib/my
LIB_DIR = lib
NAME = libmy.a
MYH = include/my.h
BUILD = ar rcs $(NAME) $(DIR)/*.o
MV = mv $(NAME) $(LIB_DIR)
CP = cp $(MYH) $(DIR)
all: $(NAME)
$(NAME): $(OBJ)
$(BUILD)
$(MV)
$(CP)
clean:
rm -f $(OBJ)
fclean:clean
rm -f $(LIB_DIR)/$(NAME)
re: fclean all
.PHONY: fclean all re clean
我添加了.PHONY
,但它改变了任何地方:(
他总是进行BUILD, MV and CP
呼叫。如果我从Makefile中删除它们,如果他是最新的(仅使用.OBJ),它将不会重建。再次感谢。
您正在将libmy.a
移至目录lib
。下次运行make时,它将查找libmy.a
,由于它不存在,它将被构建。
make将始终在当前目录中寻找目标(在您的情况下为libmy.a
)。因此,如果将文件移动到另一个位置,make会认为该文件尚未创建。
经验法则:目标的配方应始终创建目标所命名的文件。
可能的解决方案:
NAME = lib/libmy.a
)限定目标名称(可能在您的情况下最简单)