1

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/”在服务器。

4

1 回答 1

0

您似乎将 make 输出与编译器输出混淆了。您显示的错误消息不是由 make 产生的,而是由您使用的任何编译器(可能是 gcc)产生的。

请注意,ERROR_PARSER_LEXassignemt to 是一个延迟分配。的值在SRCDIR每次使用时都会被扩展ERROR_PARSER_LEX。这或许可以解释为什么 的值SRCDIR看起来不像你认为的那样。

编辑

该问题似乎与您的 makefile 无关。Make 清楚地表明它 /home/wholesale/children/dev5/comps/erm/src/ermparselex.c作为源文件传递给编译器。

指向不同文件的错误消息可能意味着某些源文件包含 /pf24 中的某些内容。

gcc 选项在-E诊断此类问题时非常有用。用它替换-o ...选项,它将预处理的源代码输出到标准输出。这应该会显示哪个文件包含 /pf24 中的文件。

于 2012-05-29T11:35:32.850 回答