C Makefile忽略@to静默输出
我有一个Makefile:C Makefile忽略@to静默输出,c,makefile,C,Makefile,我有一个Makefile: CC = @gcc RM = @rm TARGET = test PLUGINS_DIR = plugins PLUGINS_C = $(wildcard $(PLUGINS_DIR)/*.c) PLUGINS_O = $(patsubst %.c,%.o, $(PLUGINS_C)) PLUGINS_SO = $(patsubst %.c,%.so, $(PLUGINS_C))
CC = @gcc
RM = @rm
TARGET = test
PLUGINS_DIR = plugins
PLUGINS_C = $(wildcard $(PLUGINS_DIR)/*.c)
PLUGINS_O = $(patsubst %.c,%.o, $(PLUGINS_C))
PLUGINS_SO = $(patsubst %.c,%.so, $(PLUGINS_C))
.PHONY: plugins
new: clean all
all: $(TARGET) $(PLUGINS_SO)
$(TARGET): $(TARGET).o
$(CC) -o $@ $^ -g -Wall -std=gnu99 -ldl -Wl,--export-dynamic
$(PLUGINS_DIR)/%.so: $(PLUGINS_DIR)/%.o
$(CC) $^ -o $@ -shared
$(PLUGINS_DIR)/%.o: $(PLUGINS_DIR)/%.c
$(CC) -c $< -o $@ -pedantic -g -Wall -std=c99 -fpic -I.
clean:
$(RM) -rf $(TARGET) *.o *.a $(PLUGINS_O) $(PLUGINS_SO)
CC=@gcc
RM=@RM
目标=测试
PLUGINS\u DIR=插件
PLUGINS\u C=$(通配符$(PLUGINS\u DIR)/*.C)
PLUGINS\u O=$(patsubst%.c,%.O,$(PLUGINS\u c))
PLUGINS\u-SO=$(patsubst%.c,%.SO,$(PLUGINS\u-c))
.假冒:插件
新:清洁所有
全部:$(目标)$(插件)
$(目标):$(目标)。o
$(CC)-o$@$^-g-Wall-std=gnu99-ldl-Wl,--导出动态
$(插件目录)/%。所以:$(插件目录)/%。o
$(CC)$^-o$@-共享
$(插件目录)/%.o:$(插件目录)/%.c
$(CC)-c$<-o$@-pedantic-g-Wall-std=c99-fpic-I。
清洁:
$(RM)-rf$(目标)*.o*.a$(插件\u o)$(插件\u SO)
但是clean
仍在输出消息!(rm插件/tt.o插件/kk.o
)
如果我删除rm
前面的@
,那么除了第一条消息之外,我还会收到另一条消息:rm-rf test*.o*.a plugins/kk.o plugins/tt.o plugins/kk.so plugins/tt.so
如何使完全静音?(请不要使用make
开关,只需在Makefile中进行编码)
编辑:使用Make4.0,我想你弄错了;我敢打赌这不是你的规矩
这些对象文件被视为“中间目标”,因此make会自动为您删除它们。当它这样做时,它会打印这些信息,这样你就知道他们去了哪里。阻止这种情况发生的唯一方法是定义.SILENT:
特殊目标(或者给出-s
标志,但您说不想这样做)
或,你可以确保制作不考虑这些文件是中间的(因此不删除它们),列出它们作为先决条件,也许:
all: $(TARGET) $(PLUGINS_SO) $(PLUGINS_O)
我想你搞错了;我敢打赌这不是你的规矩
这些对象文件被视为“中间目标”,因此make会自动为您删除它们。当它这样做时,它会打印这些信息,这样你就知道他们去了哪里。阻止这种情况发生的唯一方法是定义.SILENT:
特殊目标(或者给出-s
标志,但您说不想这样做)
或,你可以确保制作不考虑这些文件是中间的(因此不删除它们),列出它们作为先决条件,也许:
all: $(TARGET) $(PLUGINS_SO) $(PLUGINS_O)
我想你搞错了;我敢打赌这不是你的规矩
这些对象文件被视为“中间目标”,因此make会自动为您删除它们。当它这样做时,它会打印这些信息,这样你就知道他们去了哪里。阻止这种情况发生的唯一方法是定义.SILENT:
特殊目标(或者给出-s
标志,但您说不想这样做)
或,你可以确保制作不考虑这些文件是中间的(因此不删除它们),列出它们作为先决条件,也许:
all: $(TARGET) $(PLUGINS_SO) $(PLUGINS_O)
我想你搞错了;我敢打赌这不是你的规矩
这些对象文件被视为“中间目标”,因此make会自动为您删除它们。当它这样做时,它会打印这些信息,这样你就知道他们去了哪里。阻止这种情况发生的唯一方法是定义.SILENT:
特殊目标(或者给出-s
标志,但您说不想这样做)
或,你可以确保制作不考虑这些文件是中间的(因此不删除它们),列出它们作为先决条件,也许:
all: $(TARGET) $(PLUGINS_SO) $(PLUGINS_O)
我没有收到你的Makefile的任何消息。(GNU make 3.81)@OlafDietsche我在make 4.0上.o文件的rm正在删除中间文件。没有运行rm命令。你需要告诉make不要那样做以避免那个消息。请参阅疯狂科学家的答案,以了解如何做到这一点。另一种方法是使用.PRECIOUS。我不会使用.PRECIOUS
。这还有其他你可能不想要的副作用。我在你的Makefile中没有收到任何消息。(GNU make 3.81)@OlafDietsche我在make 4.0上.o文件的rm正在删除中间文件。没有运行rm命令。你需要告诉make不要那样做以避免那个消息。请参阅疯狂科学家的答案,以了解如何做到这一点。另一种方法是使用.PRECIOUS。我不会使用.PRECIOUS
。这还有其他你可能不想要的副作用。我在你的Makefile中没有收到任何消息。(GNU make 3.81)@OlafDietsche我在make 4.0上.o文件的rm正在删除中间文件。没有运行rm命令。你需要告诉make不要那样做以避免那个消息。请参阅疯狂科学家的答案,以了解如何做到这一点。另一种方法是使用.PRECIOUS。我不会使用.PRECIOUS
。这还有其他你可能不想要的副作用。我在你的Makefile中没有收到任何消息。(GNU make 3.81)@OlafDietsche我在make 4.0上.o文件的rm正在删除中间文件。没有运行rm命令。你需要告诉make不要那样做以避免那个消息。请参阅疯狂科学家的答案,以了解如何做到这一点。另一种方法是使用.PRECIOUS。我不会使用.PRECIOUS
。这还有其他你可能不想看到的副作用。明确地说,makeclean
不会打印这一行,因为它不会构建这些目标,所以不会删除它们。它只由makeall
打印。是的,就是这样:)说清楚点,makeclean
不会打印那一行,因为它不会生成那些目标,所以不会删除它们。它只由makeall
打印。是的,就是这样:)说清楚点,makeclean
不会打印那一行,因为它不会生成那些目标,所以不会删除它们。它只由makeall
打印。是的,就是这样:)说清楚点,makeclean
不会打印那一行,因为它不会生成那些目标,所以不会删除它们。它只由makeall
打印