我如何停止说make: Nothing to be done for 'all'.
或make: 'file' is up to date
?我希望我的构建在没有做任何事情时保持沉默 - 还有其他地方调用echo
来跟踪构建进度,所以这条消息只会让事情变得混乱。我目前正在沉默它:
all: dependency1 dependency2
@:
某事告诉我必须有更好的方法。有什么想法吗?
编辑:
但是,当 需要构建某些内容时,我想保持命令回显工作。我希望的一个很好的例子是--no-print-directory
,但我找不到任何其他标志来关闭所选的消息。
答案 0 :(得分:6)
因此,经过几天的网络阅读后,看起来没有比我正在做的更好的方式了。有些人推荐了以下内容:
all: dependency1 dependency2 | silent
silent:
@:
也就是说,仅仅取决于silent
目标就足以让事情变得安静下来。由于我没有提出任何其他可行的解决方案,我会按照我的方式进行。
答案 1 :(得分:5)
也许make -s
?
答案 2 :(得分:1)
你可以试试......
$ make -q || make
这样做的好处是,当没有任何事情要做时,什么都不打印,但是当需要继续时,make会产生正常输出......
答案 3 :(得分:1)
从旧的make(1)手册页引用(从内存中),BUGS部分:有些事情是你无法搞定的。同时,-s或--silent选项可能有所帮助。
答案 4 :(得分:0)
您可以通过设置MAKEFLAGS在makefile中设置要生成的-s
命令行参数。除非您明确地打印它,否则不会打印任何内容,因此我使用以下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编译任何c ++项目,其中源文件(扩展名为.cc)放入src
目录,头文件放入include
目录。
答案 5 :(得分:-2)
make 2>&1 | egrep -v 'Nothing to be done|up to date'