Makefile:错误运行'make all'

Posted

技术标签:

【中文标题】Makefile:错误运行\'make all\'【英文标题】:Makefile: error running 'make all'Makefile:错误运行'make all' 【发布时间】:2014-03-19 21:17:47 【问题描述】:

当我运行 make all 规则中指定的相同 gcc 命令时,我没有收到任何错误。但是当我运行 make all 时,我得到了一堆错误。为什么会这样?

生成文件:

all: program.c
      gcc -I$HOME/ffmpeg/include program.c -L$HOME/ffmpeg/lib -lswscale -lavdevice -lavfilter -lswscale -lswresample -lavformat -lavcodec -lavutil -lz -lm -lpthread -o program

运行 gcc 命令:

 (No error)

运行 make all:

gcc -IOME/ffmpeg/include program.c -LOME/ffmpeg/lib -lswscale -lavdevice -lavfilter -lswscale -lswresample -lavformat -lavcodec -lavutil -lz -lm -lpthread -o program
program.c:15:32: error: libavcodec/avcodec.h: No such file or directory
program.c:16:32: error: libswscale/swscale.h: No such file or directory
program.c:17:34: error: libavformat/avformat.h: No such file or directory
program.c:19: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
program.c:24: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
program.c:95: error: expected ')' before '*' token
program.c:128: error: expected ')' before '*' token
program.c:201: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
program.c: In function 'main':
program.c:253: error: 'AVFrame' undeclared (first use in this function)
program.c:253: error: (Each undeclared identifier is reported only once
program.c:253: error: for each function it appears in.)
program.c:253: error: 'loaded_image' undeclared (first use in this function)
program.c:255: error: 'img_copy' undeclared (first use in this function)
program.c:255: error: 'AV_PIX_FMT_RGB24' undeclared (first use in this function)
program.c:256: error: 'current_frame' undeclared (first use in this function)
make: *** [all] Error 1

【问题讨论】:

我认为,在你的 makefile 中你有 gcc -IOME 而不是 gcc -I$HOME @PetrBudnik,不,只是 $H 不是 make 变量。 @CarlNorum 你确定不能按照@juanchopanza 建议的方式使用它吗? (我在第一条评论中没有使用() 时犯了一个错误)。 @PetrBudnik - 是的,你可以。 $(HOME) 也是正确的。在这种情况下,make 将展开它而不是 shell。 @CarlNorum 是的,我必须检查我自己的一个 makefile 以确保 - 你让我想知道 ;)... 【参考方案1】:

$HOME 在您的 make 环境中扩展为 OME。如果你想让 shell 扩展它,你需要转义它:

  gcc -I$$HOME/ffmpeg/include ...

现在发生在您身上的是 make$H 扩展为空,然后按原样使用该行的其余部分。

【讨论】:

【参考方案2】:

在命令行 (shell) 上使用 $HOME 和在 Makefile 中使用 $HOME 是有区别的。

在 Makefile 中,变量名必须用括号括起来,如

all: program.c
      gcc -I$(HOME)/ffmpeg/include program.c -L$HOME/ffmpeg/lib -lswscale -lavdevice -lavfilter -lswscale -lswresample -lavformat -lavcodec -lavutil -lz -lm -lpthread -o program

请参阅Basics of Variable References 和Variables from the Environment 了解更多信息。

【讨论】:

以上是关于Makefile:错误运行'make all'的主要内容,如果未能解决你的问题,请参考以下文章

Makefile入门(八):make运行

如何调试makefile

makefile调用makefile错误

如何调试makefile

Makefile 问题:错误 127、255,在 makefile 中运行程序

使用 make 命令时出现错误“make: [Makefile:2: all] Error 127”