簡體   English   中英

makefile 重建甚至是最新的

[英]makefile rebuild even is it up to date

我的 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 )限定目標名稱(在您的情況下可能最簡單)
  • 創建一個虛擬文件來代替移動的文件,以便 make 查看文件是否存在。 但這很復雜,如果做得不好,容易產生誤解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM