规则中的makefile编译器输出

时间:2017-07-13 08:30:15

标签: makefile

我正在使用makefile和Eclipse-Output-Parser,因此我需要编译器的输出带有compiler-flags。当我删除@ 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 $@

我尝试了一些if-else-statesment但没有成功。

2 个答案:

答案 0 :(得分:0)

您可以选择一个*.c源文件,例如foo.c和:

SILENT := @
...
.PHONY: foo.o
foo.o: SILENT :=
...
$(OBJECTDIR)/%.o: %.c | $(OBJECTDIR)
  $(TRACE_CC)
  $(SILENT)$(CC) $(CFLAGS)  $(IAR_INCLUDES) \
  ...

对于所有*.o目标,SILENT除了@外都是foo.o。如果您事先不知道源文件的名称,则可以改为:

FOO := $(word 1,$(patsubst %.c,%.o,$(wildcard *.c)))
...
.PHONY: $(FOO)
$(FOO): SILENT :=

注意:由于foo.o是假的,每次调用make时都会重新编译。这可以保证您始终可以获得编译命令的回显。但是,由于它也可以触发其他规则,请仔细选择foo.o。如果需要,您甚至可以使用 true 空虚拟foo.c文件:

.PHONY: foo.o
foo.o: SILENT :=
foo.c:
    @touch $@

答案 1 :(得分:0)

这是我的解决方案:

 TEST_STRING1:=teststring1
 TEST_STRING2:=teststring1

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

请注意逗号。我使用了这种形式:$(if $(filter $(VAR1),$(VAR2)),then[,else])