我的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),它将不会重建。
再次感谢。
答案 0 :(得分:5)
您正在将libmy.a
移至目录lib
。下次运行make时,它将寻找libmy.a
,由于它不存在,它将被构建。
make将始终在当前目录中寻找目标(在您的情况下为libmy.a
)。因此,如果将文件移到另一个位置,make会认为该文件尚未创建。
经验法则是:目标的配方应始终创建目标所命名的文件。
可能的解决方案:
NAME = lib/libmy.a
)来限定目标名称(在您的情况下可能最简单)