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.

Foi útil?

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'

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top