【问题标题】:Location replaced while running makefile运行 makefile 时位置被替换
【发布时间】:2012-05-29 10:24:39
【问题描述】:

makefile的代码sn-ps:

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

【问题讨论】:

    标签: linux makefile


    【解决方案1】:

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

    请注意,ERROR_PARSER_LEX 的分配是延迟分配。每当使用 ERROR_PARSER_LEX 时,SRCDIR 的值就会被扩展。这或许可以解释为什么 SRCDIR 的值看起来不像您认为的那样。

    编辑

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

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

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

    【讨论】:

    • 您好 Kristof,感谢您的回复。现在我知道如何解决错误“错误:âget_comment_lineâ 的静态声明遵循非静态声明”,我修改路径“/home/dev5/comps/erm/src”中的“ermparselex.l”。但是当我再次运行makefile时,代码修改deos没有反映。
    • 请发布您的 makefile,以便我们弄清楚为什么它使用的源文件与您期望的不同。
    • 请编辑问题以包含相关的 makefile sn-p(s)。不要只是将其作为评论发布,否则将无法阅读。
    • 为了让“lex”命令正常工作,我安装了 Gnu 的 flex 和 bison 包。
    • Make 应该向您展示它正在使用的实际 lex 命令。它是在运行“lex /home/dev5/comps/erm/src/ermparselex.l”还是其他什么? (请发布更广泛的 makefile。您几乎可以肯定没有给我们足够的信息来帮助您。)
    猜你喜欢
    • 2011-09-23
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    相关资源
    最近更新 更多