Я работаю над 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, это означало, что это сработало, поэтому я не могу найти никаких объяснений.
Вы знаете, как сделать так, чтобы я сделал то, что искал?
Большое спасибо.
EDIT: Замечательная помощь от многих из вас, я все еще ищу рецепт, но я нашел способ просто отображать, когда это удалось, и когда это не удалось.
$(NAME): $(OBJS)
@$(COMP) $(OBJS) -o $(NAME) && echo -e "\033[32mCompilation: OK\033[0m" || echo -e "\033[31mCompilation: ERROR\033[0m"
Я буду продолжать копать, спасибо.
Вы пытаетесь смешать bash и сделать. В вашем примере оператор ifeq разрешен во время чтения make-файла (не после того, как был запущен предыдущий рецепт), так что $? не имеет смысла. Вы, вероятно, должны сделать это из конкатенированного рецепта. – John
Как правило, очень плохая идея удалить ошибку из вывода make. Существует множество редакторов, которые анализируют вывод компилятора для отслеживания их для последующего руководства пользователя. vim фиксирует этот вывод, и вы можете перейти от ошибки к ошибке в редакторе. Удаление этой функции делает процесс сборки черной дырой! – Klaus
Насколько интересен ха-ха, спасибо за ввод, я считаю, что нашел способ отобразить сообщение об ошибке, не касаясь этих ошибок. – Christopher