首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Makefile:运行“Makefile”时出错

Makefile:运行“Makefile”时出错
EN

Stack Overflow用户
提问于 2014-03-19 21:17:47
回答 2查看 460关注 0票数 1

当我运行相同的gcc命令指定在我的make all规则,我没有错误。但是当我跑去做所有的事时,我会犯一大堆错误。为什么会发生这种情况?

Makefile:

代码语言:javascript
复制
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的命令:

代码语言:javascript
复制
 (No error)

跑步使一切:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-19 21:22:05

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

代码语言:javascript
复制
  gcc -I$$HOME/ffmpeg/include ...

现在发生在您身上的是,make正在将$H扩展为零,然后使用行的其余部分。

票数 5
EN

Stack Overflow用户

发布于 2014-03-19 21:23:27

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

在Makefile中,必须用括号包围变量名,如下

代码语言:javascript
复制
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

有关更多信息,请参见变量引用的基础环境变量

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22518314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档