9

我如何停止说make: Nothing to be done for 'all'.or make: 'file' is up to date?我希望我的构建在它不做任何事情时保持沉默——还有其他地方echo被调用来跟踪构建进度,所以这个消息只是把事情弄得乱七八糟。我目前正在像这样使其静音:

all: dependency1 dependency2
    @:

有些东西告诉我一定有更好的方法。有任何想法吗?

编辑:

但是,当它确实需要构建某些东西时,我想保持命令 echo 工作。我希望的一个很好的例子是沿线--no-print-directory,但我找不到任何其他标志来关闭选定的消息。

4

6 回答 6

7

因此,在网上阅读了几天之后,看起来没有比我正在做的更好的方法了。有些人推荐了一些类似的东西:

all: dependency1 dependency2 | silent

silent:
    @:

也就是说,仅仅取决于silent目标就足以让事情平静下来。由于我没有提出任何其他可行的解决方案,我将使用我所拥有的。

于 2010-02-12T23:59:58.530 回答
6

也许make -s

于 2010-02-12T00:12:18.777 回答
2

你可以试试...

$ make -q || make

这样做的好处是,当无事可做时不会打印任何内容,但 make 在确实需要继续时会产生正常输出......

于 2010-02-12T00:12:01.827 回答
1

引用旧的 make(1) 手册页中的错误部分(从记忆中):有些事情你不能让 make 闭嘴。同时, -s 或 --silent 选项可能会有所帮助。

于 2010-02-12T00:14:34.753 回答
0

您可以-s通过设置 MAKEFLAGS 将命令行参数设置为 makefile 本身。除非您明确打印,否则不会打印任何内容,因此我使用以下 makefile 来回显调用的命令。

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 编译任何将源文件(扩展名为 .cc)放入src目录并将头文件放入目录的 c++ 项目include

于 2016-03-15T09:49:37.530 回答
-2

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

于 2010-02-12T00:48:31.237 回答