makefile的代码片段:
ERROR_PARSER_YACC = $(SRCDIR)/ermparseyac.y
ERROR_PARSER_LEX = $(SRCDIR)/ermparselex.l
ERM_OBJS = \
$(OBJDIR)/ermparseyac.o \
$(OBJDIR)/ermparselex.o \
$(OBJDIR)/ermclient.o \
$(OBJDIR)/ermcommit.o \
$(OBJDIR)/erminit.o \
$(OBJDIR)/ermlog.o \
$(OBJDIR)/ermmcp.o \
$(OBJDIR)/ermsyslog.o \
$(OBJDIR)/ermparse.o \
$(OBJDIR)/ermreport.o
$(ERM_OBJS): $(SRCDIR)/$(@F:.o=.c)
@echo .... Compiling $(@:.o=.c)
$(IDA_CC) $(SRCDIR)/$(@F:.o=.c) -o $@
SRCDIR的值为"/home/wholesale/children/dev5/comps/erm/src".
当我运行makefile时,出现以下错误:
.... Compiling /home/wholesale/children/dev5/comps/erm/obj/ermparselex.c
cc -g -DANSI -DORA817 -DTRACE_ON -DIDA_VERSION='"ISP-RG-V5.10.7GEN2A"' -DNO_MCP -DBUILDING_ERP -I/home/wholesale/children/dev5/comps/erm/include -I/home/wholesale/children/dev5/comps/erm/src -I/home/wholesale/children/dev5/comps/erm/module_test -I/home/wholesale/children/dev5/comps/erm/include -I/home/wholesale/children/dev5/comps/cfm/include -c /home/wholesale/children/dev5/comps/erm/src/ermparselex.c -o /home/wholesale/children/dev5/comps/erm/obj/ermparselex.o
/pf24/wholesale/dvp/comps/erm/src/ermparselex.l:282: error: static declaration of âget_comment_lineâ follows non-static declaration
/pf24/wholesale/dvp/comps/erm/src/ermparselex.l:168: error: previous implicit declaration of âget_comment_lineâ was here
我不明白makefile如何将位置“/ home / wholesale / children / dev5 / comps / erm / src”替换为不同的位置“/ pf24 / wholesale / dvp / comps / erm / src /”在服务器中不存在。
答案 0 :(得分:0)
您似乎将make输出与编译器输出混淆。您显示的错误消息不是由make生成的,而是由您正在使用的任何编译器(可能是gcc)生成的。
请注意,ERROR_PARSER_LEX
的分配是一项默认分配。每当使用SRCDIR
时,ERROR_PARSER_LEX
的值都会展开。这也许可以解释为什么SRCDIR
的价值看起来不像你认为的那样。
修改强>
问题似乎与您的makefile无关。清楚地表明它已将/home/wholesale/children/dev5/comps/erm/src/ermparselex.c
作为源文件传递给编译器。
指向不同文件的错误消息可能意味着某些源文件包含来自/ pf24的内容。
gcc的-E
选项在诊断此类问题时非常有用。用它替换-o ...
选项,它会将预处理的源代码输出到stdout。这应该显示哪个文件包含/ pf24中的文件。