我正在使用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但没有成功。
答案 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])