2015-06-01 57 views
1

如果程序(或庫)尚未構建,我有2個使用命令時崩潰的makefile,因爲make re調用fclean,應該刪除該文件並如果找不到該文件,則會崩潰。下面是生成文件的庫Makefile:如果程序尚未構建,fclean會給出錯誤

NAME = lib.a 

CC = cc 
CFLAGS = -Wall -Wextra -Werror 
SRC = *.c 

OBJ = $(SRC:.c=.o) 

INC = Includes 

all: $(NAME) 

$(NAME): 
    @$(CC) -I $(INC) $(CFLAGS) -c $? $(SRC) 
    @ar rc $(NAME) $? $(OBJ) 
    @ranlib $(NAME) 

clean: 
    @/bin/rm -f $(OBJ) 

fclean: clean 
    @/bin/rm $(NAME) 

re: fclean all 

.PHONY: all clean fclean re 

當我打電話讓再和lib.a仍然存在犯規,我得到

rm: lib.a: No such file or directory 
make: *** [fclean] Error 1 

之一反正是有得到它只是忽略fclean命令,如果找不到lib.a

感謝

回答

1

見GNU的Errors in Recipes部分做出如何在找平處理本手冊。

但是,在這種情況下,您也可以在rm級別處理此問題。 -f標誌到rm將導致它忽略不存在的文件(以及不提示刪除,並且基本上所有其他方式不會停止或返回失敗...)。

這是說,它不應該,一般來說,有必要在新的構建之前清理。當makefile寫得不正確時,通常看起來是必要的,因爲沒有正確教導源和目標之間的依賴關係(和/或根本不使用目標,並且始終只是從頭開始構建)。

+0

我需要7分鐘來接受你的答案。感謝:) 你有什麼提示,我可以在哪裏學習寫一個更好的生成文件? – dietbacon

+1

手冊是一個很好的(雖然有點密集和簡潔)閱讀。這裏有makefile教程,但其中大多數都是平庸的質量(充其量)。 John Graham-Cumming最近更新了他的[The Gnu Make Book](http://www.nostarch.com/gnumake),我只讀了一點,但我完全認爲它會很棒(他的博客文章/ etc 。關於make多年來一直很棒)。最終,核心思想是你教會如何從其所有輸入文件創建輸出文件,然後讓處理事情。 –

+0

謝謝!將考慮購買該書:) – dietbacon