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