Pregunta

¿Cómo dejo de hacer que de decir make: Nothing to be done for 'all'. o make: 'file' is up to date? Me gustaría que mi generación para estar en silencio cuando no está haciendo nada - hay otros lugares donde echo está llamada a realizar un seguimiento de construir el progreso, por lo que este mensaje es sólo saturan las cosas. Actualmente estoy silenciamiento de esta manera:

all: dependency1 dependency2
    @:

Algo me dice que tiene que haber una mejor manera. ¿Alguna idea?

Editar:

Me gustaría seguir trabajando eco de comando cuando hace necesidad de construir algo, sin embargo. Un buen ejemplo de lo que estoy esperando es a lo largo de las líneas de --no-print-directory, pero no puedo encontrar otras banderas a callar los mensajes seleccionados.

¿Fue útil?

Solución

Así que después de un par de días de lectura alrededor de la web, parece que no hay ninguna manera mejor que lo que estoy haciendo. Algunas personas recomiendan algo en la línea de:

all: dependency1 dependency2 | silent

silent:
    @:

Es decir, apenas dependiendo del objetivo silent sería suficiente para calmar los ánimos. Dado que no he venido para arriba con cualquier otro tipo de soluciones viables, voy con lo que tengo.

Otros consejos

Tal vez make -s?

Para cotización (de memoria) de la antigua marca (1) página de manual, la sección FALLOS: Hay algunas cosas que usted no puede hacer para dejar de hablar. Mientras tanto, la opción -s o --silent puede ayudar.

Usted puede tratar ...

$ make -q || make

La ventaja de hacerlo de esta manera es que no se imprime nada cuando no hay nada que hacer, sino que produce la salida normal cuando lo necesita para continuar ...

Puede establecer el argumento de línea de comandos para hacer -s en el propio archivo MAKE, mediante el establecimiento de MAKEFLAGS. No se imprime nada menos que explícitamente se imprima, así que utilice el siguiente archivo MAKE hacerse eco de los 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)

La eliminación de la variable MAKEFLAGS imprimirá todos los comandos invocados. El Makefile compila cualquier proyecto de C ++ en archivos de origen (con extensión .cc) se ponen en la src archivos y directorios de cabecera se ponen en el directorio include.

make 2>&1 | egrep -v 'Nothing to be done|up to date'

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top