求助:简单make错误——make: *** No rule to make target

chm1988 2010-03-03 10:46:51
说是简单,对我来说却不是一件简单的事。
Linux系统。我建了一个文件夹,写的.c文件全部放在这个文件里。make时出现上述错误。贴出Makefile文件:

all:main.o creat_frame.o destroy_frame.o creat_multimediaplay_frame.o play_music.o
gcc -o all main.o creat_frame.o destroy_frame.o creat_multimediaplay_frame.o play_music.o\
`pkg-config --cflags --libs gtk+-2.0`
play_music.o:play_music.c head.h
gcc -c play_music.c -o play_music.o `pkg-config --cflags --libs gtk+-2.0`
main.o:main.c head.h
gcc -c main.c -o main.o `pkg-config --cflags --libs gtk+-2.0`
creat_frame.o:creat_frame.c head.h
gcc -c creat_frame.c -o creat_frame.o `pkg-config --cflags --libs gtk+-2.0`
destroy_frame.o:destroy_frame.c head.h
gcc -c destroy_frame.c -o destroy_frame.o `pkg-config --cflags --libs gtk+-2.0`
creat_multimediaplay_frame.o:creat_multimediaplay_frame.c head.h
gcc -c creat_multimediaplay_frame.c -o creat_multimediaplay_frame.o `pkg-config --cflags --libs gtk+-2.0`
clean:
rm main.o creat_frame.o destroy_frame.o creat_multimediaplay_frame.o play_music.o

主要是play_music.c的问题,其他的都可以得到.o文件。哪位大侠指教,感激不尽。
...全文
2863 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
manytao 2010-09-20
  • 打赏
  • 举报
回复
LZ。。。。

make: *** No rule to make target `play_music.c', needed by `play_music.o'. Stop
。。这句话不明摆着告诉你 你所指向的目标文件 play_music.c 需要play_music.o嘛。。。。。
纠结的木棉花 2010-09-19
  • 打赏
  • 举报
回复
这个我也最近遇到这个问题了,不知道如何解决
leemeng0x61 2010-03-05
  • 打赏
  • 举报
回复
搞的太长了吧!直接修改成

CC=gcc
subjects=main.o creat_frame.o destroy_frame.o creat_multimediaplay_frame.o play_music.o
CFLAGS=`pkg-config --cflags --libs gtk+-2.0`

all:$(subjects)
$(CC) -o $@ $^ $(CFLAGS)
%.o:%c.c head.h
$(CC) -c $< $(CFLAGS) $@
clean:
rm $(subjects)
.....
风声边界 2010-03-04
  • 打赏
  • 举报
回复
subjects=main.o creat_frame.o destroy_frame.o creat_multimediaplay_frame.o play_music.o
all:main.o creat_frame.o destroy_frame.o creat_multimediaplay_frame.o play_music.o
gcc -o all main.o creat_frame.o destroy_frame.o creat_multimediaplay_frame.o \play_music.o `pkg-config --cflags --libs gtk+-2.0`
play_music.o:play_music.c head.h
gcc -c play_music.c `pkg-config --cflags --libs gtk+-2.0`
main.o:main.c head.h
gcc -c main.c `pkg-config --cflags --libs gtk+-2.0`
creat_frame.o:creat_frame.c head.h
gcc -c creat_frame.c `pkg-config --cflags --libs gtk+-2.0`
destroy_frame.o:destroy_frame.c head.h
gcc -c destroy_frame.c `pkg-config --cflags --libs gtk+-2.0`
creat_multimediaplay_frame.o:creat_multimediaplay_frame.c head.h
gcc -c creat_multimediaplay_frame.c `pkg-config --cflags --libs gtk+-2.0`
clean:
rm main.o creat_frame.o destroy_frame.o creat_multimediaplay_frame.o play_music.o

如果仅仅是其中的一个出问题,可能是你书写格式问题
确保所有的*.c, *.h 存在(如果在不同路径下,指定搜索路径)
makefile的基本要求要知道的
*.o:*.c/cpp要一致
命令行以tab开始
.......

你可以先写个简单的makefile。熟悉一下makefile的各要素,然后再写复杂的

简略修改一把格式是这样的
CC=gcc
subjects=main.o creat_frame.o destroy_frame.o creat_multimediaplay_frame.o play_music.o
CFLAGS=`pkg-config --cflags --libs gtk+-2.0`

all:$(subjects)
$(CC) -o $@ $^ $(CFLAGS)
play_music.o:play_music.c head.h
$(CC) -c $< $(CFLAGS)
main.o:main.c head.h
$(CC) -c $< $(CFLAGS)
creat_frame.o:creat_frame.c head.h
$(CC) -c $< $(CFLAGS)
destroy_frame.o:destroy_frame.c head.h
$(CC) -c $< $(CFLAGS)
creat_multimediaplay_frame.o:creat_multimediaplay_frame.c head.h
$(CC) -c $< $(CFLAGS)
clean:
rm $(subjects)
.....
chm1988 2010-03-04
  • 打赏
  • 举报
回复
首先谢谢各位大侠花费宝贵的时间看和回复帖子,对weihua和宝马的认真谨慎表示尊敬,问题已经解决。

to fox:谢谢你的建议,直接指导我解决了问题。我检查了文件,发现一个文件名写错了。谢谢各位大侠。耽误时间了。

总结一下这个错误:这个错误是由于文件的错误,由于编译了不存在的文件导致这个错误,这点没有疑问,fox是对的。

天亮后说晚安 2010-03-04
  • 打赏
  • 举报
回复
【tab】命令行

回复内容太短了!
FoxMessire 2010-03-04
  • 打赏
  • 举报
回复
重新检查下文件,可能是哪个细节方面写错了
chm1988 2010-03-04
  • 打赏
  • 举报
回复
谢谢楼上指点。Makefile确实以tal开头的。由于复制上来前面的空格没了。修改Makefile编译顺序,把play_music.c放在最后编译,前面都过了,就是这个过不了。提示错误如下:
[embuser@localhost embbed]$ make
gcc -c main.c -o main.o `pkg-config --cflags --libs gtk+-2.0`
gcc -c creat_frame.c -o creat_frame.o `pkg-config --cflags --libs gtk+-2.0`
gcc -c destroy_frame.c -o destroy_frame.o `pkg-config --cflags --libs gtk+-2.0`
gcc -c creat_multimediaplay_frame.c -o creat_multimediaplay_frame.o `pkg-config --cflags --libs gtk+-2.0`
make: *** No rule to make target `play_music.c', needed by `play_music.o'. Stop.
您看前面都过了,这个就过不了。网上都说是Makefile的问题,会不会是play_music.c程序有问题呢?我是新手,问题出在哪也只能看网上的大侠发言。
rzsheng 2010-03-04
  • 打赏
  • 举报
回复
我复制你的Makefile,创建了几个和你Makefile中的文件名一样的几个文件,

编译过程中并不是如你所说的没有规则的错误。


由于我没有安装gtk,提示的找不到gtk
rzsheng 2010-03-04
  • 打赏
  • 举报
回复
命令行以tab开始


命令行以tab开始


命令行以tab开始

chm1988 2010-03-04
  • 打赏
  • 举报
回复
首先谢谢楼上的大侠,用您给的Makefile还是出错,一样的错误。确信所有.c文件是自己写的,.h文件也是自己写的,.h文件已经拷贝到了标准目录。所有.c文件都在同一个文件夹,编译时也进入了这个指定文件夹。Makefile命令行也是以table键开头的。同样的写法,其他的.c文件都能生成.o文件,为什么唯独这个错误呢?
durant 2010-03-03
  • 打赏
  • 举报
回复
快要沉了,帮你顶下
希望有会的人来帮你解答下
chm1988 2010-03-03
  • 打赏
  • 举报
回复
大侠们,现身吧。我静静等候着。

23,110

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧