请教一个关于Makefile的问题。提示出错:make: *** 没有规则可以创建“ioctl”需要的目标“gcc”。 停止。

yhh57617101 2011-07-08 04:29:32
刚开始学写Makefile,很不顺利。就是一个很小的C文件,想通过Makefile的方式编译。
我写的Makefile 内容如下:
ioctl : ioctl.c\
gcc -o ioctl ioctl.c
clean :\
rm ioctl

感觉应该会很简单,可是make的时候总是提示下面的错误:

make: *** 没有规则可以创建“ioctl”需要的目标“gcc”。 停止。

很想知道为什么,请大家帮忙看下!谢谢拉!!
...全文
4049 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
秋容吖 2011-12-02
  • 打赏
  • 举报
回复
将Makefile的文件名改为小写的,即makefile
这个解决办法不错
厉害~
还是不明白为什么的,在另外一个工程中用的是大写MakeFile,却能编译成功·~
为码而乐 2011-11-28
  • 打赏
  • 举报
回复
将Makefile的文件名改为小写的,即makefile
lisheng053758 2011-10-08
  • 打赏
  • 举报
回复
谢谢,小问题哈
jernymy 2011-07-17
  • 打赏
  • 举报
回复
vi的设置的问题。
楼主的那个错误
makefile:2: *** 遗漏分隔符 。 停止。

就是因为使用空格而没有用tab,makefile比较严格tab的使用
阿磊2013 2011-07-17
  • 打赏
  • 举报
回复
难道真是VI的问题吗?那么我先记下来了,省得以后出问题了找不到原因。
yummylei 2011-07-14
  • 打赏
  • 举报
回复
学习了!
yhh57617101 2011-07-13
  • 打赏
  • 举报
回复
问题解决了,应该是Vi的问题,VI会把Tab直接转换成空格,才导致遗漏分隔符的错误。看网上也有人说VI的tab真是鸡肋阿。。。
yhh57617101 2011-07-12
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 wyjq395 的回复:]

C/C++ code

out: mydir.c
gcc -o out mydir.c
clean:
rm out


我刚才试了下都没有问题,应该还是格式问题,估计是14楼说的。
[/Quote]

不是冒号问题呢,会不会跟系统配置有关系???
yhh57617101 2011-07-12
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 wickyboy 的回复:]

你的冒号不会是用的中文冒号吧?
[/Quote]

我又重新打了一遍,确定是用的英文冒号。。。。。。
justkk 2011-07-11
  • 打赏
  • 举报
回复
看看你的makefile的文件格式,不要搞成dos格式的

file makefile
yhh57617101 2011-07-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 subfate 的回复:]

ioctl : ioctl.c\
gcc -o ioctl ioctl.c
-->
ioctl : ioctl.c gcc -o ioctl ioctl.c
----此处没有规则---

1、去掉后面的“\”;
2、保证
gcc -o ioctl ioctl.c
rm ioctl
以tab开头。
[/Quote]

1.\的问题上面的回复中已经说明了。
2.我确实是用tab键入的。。。。
yhh57617101 2011-07-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 justkk 的回复:]

把后面的\去掉
[/Quote]

曾经的我也觉得没有\,但是不加这个编译就会提示下面的错误,加上就没有了。
makefile:2: *** 遗漏分隔符 。 停止。
wyjq395 2011-07-11
  • 打赏
  • 举报
回复

out: mydir.c
gcc -o out mydir.c
clean:
rm out

我刚才试了下都没有问题,应该还是格式问题,估计是14楼说的。
wickyboy 2011-07-11
  • 打赏
  • 举报
回复
ioctl:jjjj
wickyboy 2011-07-11
  • 打赏
  • 举报
回复
你的冒号不会是用的中文冒号吧?
yhh57617101 2011-07-11
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wyjq395 的回复:]

还要什么高人啊,justkk大哥的回答不就对了吗?
你不知道转换成什么没关系啊,知道是格式问题就可以了。
总共就只有几行,你自己用vi写一个Makefile手动敲入,不要复制。
同时正因为\表示继续行符,才错了。
ioctl : ioctl.c\
gcc -o ioctl ioctl.c
不就等于ioctl : ioctl.c gcc -o ioctl ioctl.c
那么gc……
[/Quote]

我确实是用vi一个字符一个字符敲进去的,没有偷懒。我也知道\是表示继续行符。改成下面这样:
ioctl : ioctl.c
[tab]gcc -o ioctl ioctl.c
clean :
[tab]rm ioctl

还是会提示出错:makefile:2: *** 遗漏分隔符 。 停止。

正是因为简单出问题了才会觉得很奇怪啊,才需要帮助,小问题才最容易被忽视呀。。
wyjq395 2011-07-11
  • 打赏
  • 举报
回复
还要什么高人啊,justkk大哥的回答不就对了吗?
你不知道转换成什么没关系啊,知道是格式问题就可以了。
总共就只有几行,你自己用vi写一个Makefile手动敲入,不要复制。
同时正因为\表示继续行符,才错了。
ioctl : ioctl.c\
gcc -o ioctl ioctl.c
不就等于ioctl : ioctl.c gcc -o ioctl ioctl.c
那么gcc,-o ioctl等都成了ioctl的依赖文件了
yhh57617101 2011-07-11
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xunxun1982 的回复:]

那很奇怪,\是表示续行符的,用了才不对
[/Quote]

是很奇怪,所以向高人求解!会不会是因为一些其他的问题??很冷的那种???
xunxun 2011-07-11
  • 打赏
  • 举报
回复
那很奇怪,\是表示续行符的,用了才不对
yhh57617101 2011-07-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 justkk 的回复:]

要不直接转换一下试试吧
dos2unix makefile
[/Quote]
转换成什么?不是很明白。dos2unix makefile 用不起来阿。。。。
加载更多回复(5)

23,222

社区成员

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

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