Как мне заткнуться, когда ничего не нужно делать? - PullRequest
4 голосов
/ 12 февраля 2010

Как мне перестать произносить make: Nothing to be done for 'all'. или make: 'file' is up to date? Я бы хотел, чтобы моя сборка молчала, когда она ничего не делает - в других местах вызывается echo для отслеживания хода сборки, поэтому это сообщение просто загромождает вещи. В настоящее время я заставляю его замолчать так:

all: dependency1 dependency2
    @:

Что-то подсказывает мне, что должен быть лучший способ. Есть идеи?

Edit:

Я бы хотел, чтобы команда echo работала, когда нужно что-то построить. Хороший пример того, на что я надеюсь, это в духе --no-print-directory, но я не могу найти другие флаги, чтобы закрыть выбранные сообщения.

Ответы [ 6 ]

6 голосов
/ 13 февраля 2010

Итак, после пары дней чтения в Интернете, похоже, нет лучшего способа, чем то, что я делаю. Некоторые люди рекомендовали что-то вроде:

all: dependency1 dependency2 | silent

silent:
    @:

То есть, достаточно просто зависеть от цели silent, чтобы успокоить ситуацию. Поскольку я не придумал никаких других работоспособных решений, я пойду с тем, что имею.

5 голосов
/ 12 февраля 2010

Может быть make -s?

1 голос
/ 12 февраля 2010

Цитировать (по памяти) со старой страницы руководства make (1), раздел BUGS: Есть некоторые вещи, о которых нельзя заставить make замолчать. Между тем, опция -s или --silent может помочь.

1 голос
/ 12 февраля 2010

Вы можете попробовать ...

$ make -q || make

Преимущество такого способа состоит в том, что ничего не печатается, когда нечего делать, но make выдает нормальный вывод, когда нужно продолжить ...

0 голосов
/ 15 марта 2016

Вы можете установить аргумент командной строки -s для создания в самом make-файле, установив MAKEFLAGS. Ничего не печатается, если вы явно не распечатываете его, поэтому я использую следующий make-файл для вывода вызванных команд.

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)

Удаление переменной MAKEFLAGS приведет к печати всех вызванных команд. Makefile компилирует любой проект c ++, в котором исходные файлы (с расширением .cc) помещаются в каталог src, а заголовочные файлы - в каталог include.

0 голосов
/ 12 февраля 2010

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

...