规则中的makefile编译器输出

规则中的makefile编译器输出,makefile,Makefile,我正在使用一个makefile和Eclipse输出解析器,因此我需要带有编译器标志的编译器输出。当我删除@bevor$(CC)时,编译的每个文件都将打印必要的信息。这肯定太多了,因为很难看到警告等。是否可以只打印一次 $(OBJECTDIR)/%.o: %.c | $(OBJECTDIR) $(TRACE_CC) @$(CC) $(CFLAGS) $(IAR_INCLUDES) \ $(if $(findstring 1,$(OPTIMIERUNG)),$(CFLAGS_OPTI_

我正在使用一个makefile和Eclipse输出解析器,因此我需要带有编译器标志的编译器输出。当我删除
@
bevor
$(CC)
时,编译的每个文件都将打印必要的信息。这肯定太多了,因为很难看到警告等。是否可以只打印一次

$(OBJECTDIR)/%.o: %.c | $(OBJECTDIR)
  $(TRACE_CC)
  @$(CC) $(CFLAGS)  $(IAR_INCLUDES) \
  $(if $(findstring 1,$(OPTIMIERUNG)),$(CFLAGS_OPTI_ON), \
    $(if $(findstring 1,$(OPTIMIERUNG_SPECIAL)),$(if $(findstring $(<F), \
        $(PROJECT_SOURCEFILES_OPTIMIERUNG)),$(CFLAGS_OPTI_OFF), $(CFLAGS_OPTI_ON)),$(CFLAGS_OPTI_OFF) ) ) \
  $(if $(findstring $(<F), $(PROJECT_SOURCEFILES_SPRINTF_ALLOWED)),$(SPRINTF_ALLOWED), $(SPRINTF_NOT_ALLOWED)) \
  $< --dependencies=n $(@:.o=.P) -o $@
$(OBJECTDIR)/%.o:%.c |$(OBJECTDIR)
$(跟踪抄送)
@$(CC)$(CFLAGS)$(IAR_包括)\
$(如果$(findstring 1,$(OPTIMIERUNG)),$(CFLAGS_OPTI_ON)\

$(如果$(findstring 1,$(OPTIMIERUNG_SPECIAL)),$(如果$(findstring$)(您可以选择一个
*.c
源文件,例如
foo.c
和:

SILENT := @
...
.PHONY: foo.o
foo.o: SILENT :=
...
$(OBJECTDIR)/%.o: %.c | $(OBJECTDIR)
  $(TRACE_CC)
  $(SILENT)$(CC) $(CFLAGS)  $(IAR_INCLUDES) \
  ...
对于所有
*.o
目标,除了
foo.o
之外,
静默的
将是
@
。如果您事先不知道源文件的名称,您可以:

FOO := $(word 1,$(patsubst %.c,%.o,$(wildcard *.c)))
...
.PHONY: $(FOO)
$(FOO): SILENT :=
注意:由于
foo.o
是假的,因此每次调用make时都会重新编译。这保证了您将始终获得编译命令的响应。但由于它也可能触发其他规则,请仔细选择
foo.o
。如果需要,您甚至可以使用真正的空虚拟
foo.c
文件:

.PHONY: foo.o
foo.o: SILENT :=
foo.c:
    @touch $@
这是我的解决方案:

 TEST_STRING1:=teststring1
 TEST_STRING2:=teststring1

 $(OBJECTDIR)/%.o: %.c | $(OBJECTDIR)
    $(TRACE_CC)
    $(if $(filter $(TEST_STRING1),$(TEST_STRING2)),\
    ${eval TEST_STRING2="teststring2"} \
    $(CC) ..... , \
    @$(CC) .... )

请注意逗号。我使用了以下形式:
$(如果$(filter$(VAR1),$(VAR2)),那么[,else])

好的。有时foo.o不需要重建,但需要其他文件。