我正在使用可變源和編譯器的Makefile。有條件的Makefile
基本上,我想要它做的是顯示一個綠色的消息,如果編譯工作得很好,否則紅色。此外,我想避免顯示Makefile生成的常見錯誤消息(和編譯消息)。 (當我試圖與所有的「@」做)
下面是我對現在:
COMP = gcc
NAME = test
RM = rm -f
SRC = main.c
OBJS = $(SRC:.c=.o)
CFLAGS = -Werror
all: $(NAME)
$(NAME):
@$(COMP) -c $(SRC)
@$(COMP) -o $(NAME) $(OBJS)
ifeq ($?, 0)
@echo -e '\033[1;32;40mCompilation : OK\033[0m'
else
@echo -e '\033[1;31;40mCompilation : ERROR\033[0m'
endif
clean:
@$(RM) $(OBJS)
fclean: clean
@$(RM) $(NAME)
re: fclean all
.PHONY: all clean fclean re
它所做的就是顯示「編輯:ERROR」時,它編譯好,但我認爲,如果$?
等於0意味着它解決了,所以我找不到任何解釋。
你知道如何讓它做我想找的東西嗎?
非常感謝。
編輯:從你們很多人的精彩幫助,我仍在調查食譜,但我找到了一種方法來簡單地顯示它的成功和失敗時。
$(NAME): $(OBJS)
@$(COMP) $(OBJS) -o $(NAME) && echo -e "\033[32mCompilation: OK\033[0m" || echo -e "\033[31mCompilation: ERROR\033[0m"
我會繼續挖掘,謝謝。
你正在嘗試混合bash和make。在你的例子中,ifeq語句在讀取makefile時(而不是在之前的配方運行之後)被解析,所以$?沒有意義。你應該從一個串聯的配方中做到這一點。 – John
從make的輸出中刪除錯誤通常是一個非常糟糕的主意。有很多編輯器會分析編譯器的輸出以跟蹤它們以供以後的用戶指導。 vim捕獲這個輸出,你可以在編輯器中從錯誤到錯誤。刪除此功能會使構建過程成爲黑洞! – Klaus
有趣的哈哈,感謝您的輸入,我相信我已經找到了一種方式來顯示錯誤信息,而不會觸及這些錯誤。 – Christopher