【问题标题】:creating makefile in unix在Unix中创建makefile
【发布时间】:2014-12-11 22:18:57
【问题描述】:

我已经解决这个问题一段时间了,我需要一点帮助:

制作这个程序的必要步骤是:

编译cpp2html.c生成cpp2html.o。 (重要提示:本项目源代码是C,不是C++,所以必须用gcc编译链接,而不是g++。)

运行命令

flex cppscanner.l

从 cppscanner.l 中的语言描述生成文件 lex.yy.c。

编译 lex.yy.c 以生成 lex.yy.o。 (这通常会产生有关额外令牌的警告消息。忽略它。)

链接 .o 文件以生成名为 cpp2html 的可执行程序

编写一个执行这些步骤的生成文件。当更改此过程的任何输入文件时,您的 makefile 应该只产生所需的最少步骤。

这些是我在编译时得到的错误/警告,

gcc: warning: cpp2html.o: linker input file unused because linking not done
gcc: warning; lex.yy.o: linker input file unused because linking not done
mv: cannot stat `a.out': No such file or directory

这是我的 makefile 中的内容:

enter code here

#
CPPFLAGS=-g -DDEBUG
#

#
cpps2html: cpp2html.o lex.yy.o
     gcc $(CPPFLAGS) -c cpp2thml.o lex.yy.o
     mv a.out cpp2html

cpp2thml.o: cpp2html.c
     gcc &(CPPFLAGS) -c cpp2html.c

lex.yy.c: cppscanner.l
    flex cppscaner.l

lex.yy.o: lex.yy.c
     gcc $(CPPFLAGS) -c lex.yy.c

【问题讨论】:

    标签: unix makefile linker


    【解决方案1】:

    这个

     gcc $(CPPFLAGS) -c cpp2thml.o lex.yy.o
     mv a.out cpp2html
    

    应该是

     gcc $(CPPFLAGS) -o cpp2html cpp2thml.o lex.yy.o
    

    当然-c 选项(意思是“不要尝试链接”)在这里不好。

    旁注:使用CPPFLAGS(通常为 C 预处理器的选项保留)在链接命令中有点奇怪。不违法,但是正态分布是用的

    • CPPFLAGS 用于预处理器使用的东西(例如 -Dfoo-Isomewhere
    • CFLAGS 用于 C 编译器使用的东西(例如 -g
    • LDFLAGS 用于链接器标志(例如 -Lsomewhere
    • LDLIBS 用于图书馆 (-lfoo)

    然后在相关的地方使用它们(或使用预定义的规则,适当地使用它们)。这通常在构建 .o 目标时表示 CPPFLAGSCFLAGS,在链接时表示 CFLAGSLDFLAGSLDLIBS

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-17
      • 1970-01-01
      • 2010-10-10
      • 2015-06-09
      • 1970-01-01
      • 2011-05-05
      • 2011-02-20
      • 1970-01-01
      相关资源
      最近更新 更多