我在GNU make中使用下面的Makefile。正如你所看到的,我在調用g ++的行前添加了一個@
,以防止它們被回顯到控制檯。如何防止使用echo'ing命令到控制檯?
但是,g ++命令仍然回顯。有誰知道如何防止這種情況?
我有一個幾乎相同的Makefile一個C項目,它工作正常..
謝謝!
# for portability.
SHELL = /bin/sh
CXX = g++
# compile flags.
CXXFLAGS = -g -pedantic -Wall -Wextra -Werror -march=native -O2 \
-fwhole-program -flto
TARGET = program
MANPAGE = program.8
SOURCES = $(shell echo src/*.cpp)
HEADERS = $(shell echo src/*.h)
OBJECTS = $(SOURCES:.cpp=.o)
VERSION = 0.1-beta
# installation paths.
PREFIX = $(DESTDIR)/usr/local
BINDIR = $(PREFIX)/sbin
MANDIR = $(PREFIX)/share/man/man8
# standard targets.
all: $(TARGET)
$(TARGET): $(OBJECTS)
@echo "[LD] [email protected]"
@$(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJECTS)
man:
@(cd man; gzip < $(MANPAGE) > $(MANPAGE).gz)
install: $(TARGET) man
@install -D -m 755 $(TARGET) $(BINDIR)/$(TARGET)
@install -D -m 744 man/$(MANPAGE).gz $(MANDIR)/$(MANPAGE).gz
install-strip: $(TARGET) man
@install -D -m 755 -s $(TARGET) $(BINDIR)/$(TARGET)
@install -D -m 744 man/$(MANPAGE).gz $(MANDIR)/$(MANPAGE).gz
uninstall:
@$(RM) $(BINDIR)/$(TARGET)
@$(RM) $(MANDIR)/$(MANPAGE).gz
clean:
@$(RM) $(OBJECTS)
distclean: clean
@$(RM) $(TARGET)
@(cd man; $(RM) $(MANPAGE).gz)
%.o: %.cpp $(HEADERS)
@echo "[CXX] $<"
@$(CXX) $(CXXFLAGS) -c -o [email protected] $<
.PHONY: all man install install-strip uninstall clean distclean
你有任何'src/*。h'文件嗎?如果您不這樣做,則優先考慮.o文件的內置規則。使用'wildcard'而不是'shell'應該可以解決這個問題。 – 2014-12-07 16:26:02
使用'make -s'或添加一行'.SILENT:'都會抑制'make'的所有輸出。不過,領先的'@'標記也應該這樣做。我個人不喜歡沒有顯示的makefile,或者有機制來顯示正在執行的內容,因爲當出現錯誤時很難調試。既然如此,我就不會定期使用'-s'或'.SILENT:'。 – 2014-12-07 16:43:31
謝謝@Banthar,我正在測試沒有任何頭文件的Makefile! – James 2014-12-09 21:56:37