运行makefile时替换了位置

时间:2012-05-29 10:24:39

标签: linux makefile

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

1 个答案:

答案 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中的文件。