Como faço para calar a boca, faça quando não precisa fazer nada?
-
20-09-2019 - |
Pergunta
Como eu paro de fazer de dizer make: Nothing to be done for 'all'.
ou make: 'file' is up to date
? Eu gostaria que minha construção fique em silêncio quando não está fazendo nada - há outros lugares onde echo
é chamado para rastrear o progresso da criação, então essa mensagem está apenas desgastando as coisas. Atualmente estou silenciando assim:
all: dependency1 dependency2
@:
Algo me diz que deve haver uma maneira melhor. Alguma ideia?
Editar:
Eu gostaria de manter o comando eco funcionando quando ele faz Precisa construir algo, no entanto. Um bom exemplo do que estou esperando é como --no-print-directory
, mas não consigo encontrar outros sinalizadores para calar as mensagens selecionadas.
Solução
Então, depois de alguns dias lendo na web, parece que não há nenhum caminho melhor do que o que estou fazendo. Algumas pessoas recomendaram algo parecido com:
all: dependency1 dependency2 | silent
silent:
@:
Isto é, apenas dependendo do silent
O alvo seria suficiente para acalmar as coisas. Como não criei outras soluções viáveis, vou com o que tenho.
Outras dicas
Pode ser make -s
?
Para citar (da memória) da página antiga (1) Man Page, Bugs Seção: Há algumas coisas que você não pode fazer para calar a boca. Enquanto isso, a opção -s ou - -silent pode ajudar.
Você pode tentar ...
$ make -q || make
A vantagem de fazê -lo dessa maneira é que nada é impresso quando não há nada a fazer senão fazer produz a saída normal quando precisa prosseguir ...
Você pode definir o -s
Argumento de comando a fazer no próprio Makefile, definindo makeflags. Nada é impresso, a menos que você o impeda explicitamente, então eu uso o seguinte Makefile para ecoar comandos invocados.
MAKEFLAGS += -s
PROJECT = progname
CC = g++
SDIR = src
ODIR = obj
BDIR = bin
IDIR = include
OBJS = $(patsubst $(SDIR)/%.cc,$(ODIR)/%.o,$(wildcard $(SDIR)/*.cc))
.PHONY: all debug clean
all: $(BDIR)/$(PROJECT)
debug: CFLAGS += -g -Wall -Wextra
debug: all
$(BDIR)/$(PROJECT): $(OBJS)
@mkdir -p $(BDIR)
@echo LINKING $<
@$(CC) -o $@ $(OBJS) -I$(IDIR)
$(ODIR)/%.o: $(SDIR)/%.cc
@mkdir -p $(ODIR)
@echo "COMPILING $<"
@$(CC) -o $@ -c $< $(CFLAGS)
clean:
@echo "CLEAN"
@rm -rf $(BDIR) $(ODIR)
A remoção da variável makeflags imprimirá todos os comandos invocados. O Makefile compila qualquer projeto C ++ em que arquivos de origem (com extensão .cc) são colocados no src
Os arquivos de diretório e cabeçalho são colocados no include
diretório.
make 2>&1 | egrep -v 'Nothing to be done|up to date'