免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1927 | 回复: 8
打印 上一主题 下一主题

makefile 文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-25 12:20 |只看该作者 |倒序浏览
我的makefile文件如下:
peng1:peng1.o
      gcc -o peng1 peng1.o
peng1.o:peng1.c
      gcc -c peng1.o peng1.c

.PHONY:clean
clean:
      rm peng1 peng1.o

在写入make命令时,总是先有以下提示:
gcc -c peng1.o peng1.c
gcc:peng1.o:没有那个文件或目录
make:***[peng1.o] Error 1

再一次进行make命令时有以下提示:
gcc -o peng1 peng1.o
这时编译成功了.为什么第一次会出错呢?

请各位大侠指点一下.

论坛徽章:
0
2 [报告]
发表于 2008-06-25 13:54 |只看该作者
原帖由 pengalungerlu 于 2008-6-25 12:20 发表
我的makefile文件如下:
peng1:peng1.o
      gcc -o peng1 peng1.o

peng1.o:peng1.c
      gcc -c peng1.o peng1.c

.PHONY:clean
clean:
      rm peng1 peng1.o


peng1.o:peng1.c
      gcc -c -o peng1.o peng1.c




  1. all: peng1

  2. peng1.o: peng1.c
  3.         gcc -c -o peng1.o peng1.c
  4. peng1: peng1.o
  5.         gcc -o peng1 peng1.o
  6. .PHONY:clean
  7. clean:
  8.         rm -f peng1 peng1.o

复制代码

论坛徽章:
24
15-16赛季CBA联赛之北京
日期:2018-08-17 18:43:33技术图书徽章
日期:2018-08-22 12:53:57技术图书徽章
日期:2018-08-22 12:54:20技术图书徽章
日期:2018-08-22 12:54:3015-16赛季CBA联赛之福建
日期:2018-10-19 16:58:1619周年集字徽章-庆
日期:2019-08-27 13:28:5619周年集字徽章-19
日期:2019-08-27 13:31:2619周年集字徽章-19
日期:2019-08-27 13:31:2615-16赛季CBA联赛之同曦
日期:2019-09-05 12:03:2819周年集字徽章-周
日期:2019-09-06 18:54:5415-16赛季CBA联赛之上海
日期:2018-07-25 11:55:2615-16赛季CBA联赛之青岛
日期:2018-07-10 14:13:18
3 [报告]
发表于 2008-06-25 14:16 |只看该作者
-c -o
-c 后面是 -o是啥意思?

论坛徽章:
0
4 [报告]
发表于 2008-06-25 14:43 |只看该作者
原帖由 incle 于 2008-6-25 14:16 发表
-c -o
-c 后面是 -o是啥意思?


-o 表示指定輸出檔。

--

论坛徽章:
0
5 [报告]
发表于 2008-06-25 16:24 |只看该作者
gcc的-o选项指定了编译生成的目标文件名,例如:gcc -o hello hello.c生成的目标文件就是hello。
若没有指定-o选项则会使用“a.out”作为目标文件名,例如:gcc hello.c生成的目标文件就是a.out。


gcc对源代码的编译可以划分为4个步骤:
1.预处理
2.生成汇编代码
3.生成目标代码
4.链接生成最终可执行的代码

可以通过参数来控制GCC的编译过程,即编译到上述的第几步停止
-E选项:只完成第一步
-S选项:只完成第1、2步
-c选项:完成1、2、3步
若没有以上三个选项,则完成所有的4步。


make的执行过程十分位两个阶段的:

第一阶段:根据终极目标建立依赖关系链表:peng1->peng1.o->peng1.c

第二阶段:查看peng1.c是否比peng1.o更新,若是,则执行gcc -c peng1.o peng1.c。

但是由于首次执行,目录下无peng1.o这个文件,所以会出现“gcc:peng1.o:没有那个文件或目录”的错误。但是peng1.c文件存在,所以只会把peng1.c文件编译生成目标文件peng1.o(由于没有用-o选项指定目标文件名,所以gcc会自动将源文件的扩展名.c替换成.o,作为目标文件名peng1.o)。

尽管如此,gcc -c peng1.o peng1.c这条命令还是出错了(由于目录下无peng1.o这个文件),make中断退出,但是这时peng1.o这个文件已经生成了(如上面所述,由peng1.c生成的)!

当你第二次执行make命令时,还是执行上面的两个阶段,但在执行第二阶段时,由于第一次执行make命令时,已经生成peng1.o文件,peng1.o比peng1.c文件新,所以不会执行gcc -c peng1.o peng1.c命令。
make会继续查看peng1.o是否比peng1文件新,由于peng1文件尚不存在,所以执行gcc -o peng1 peng1.o命令,将目标文件peng1.o链接生成最终可执行的代码。所以第二次make时是成功的。


所以下面这一段
peng1.o:peng1.c
      gcc -c peng1.o peng1.c
(如果写成这样,意思就是将peng1.o与peng1.c编译共同生成一个目标文件)  
      
要改成
peng1.o:peng1.c
      gcc -c -o peng1.o peng1.c
      
(如果写成这样,意思就是将peng1.c编译生成一个peng1.o目标文件,我想这应该是你的本意吧!)

评分

参与人数 1可用积分 +9 收起 理由
MMMIX + 9 相当清楚详尽的回复!

查看全部评分

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
6 [报告]
发表于 2008-06-25 21:56 |只看该作者
原帖由 incle 于 2008-6-25 14:16 发表
-c -o
-c 后面是 -o是啥意思?

有问题多看看文档

论坛徽章:
0
7 [报告]
发表于 2008-06-26 15:52 |只看该作者
原帖由 pengalungerlu 于 2008-6-25 12:20 发表
我的makefile文件如下:
peng1:peng1.o
      gcc -o peng1 peng1.o
peng1.o:peng1.c
      gcc -c peng1.o peng1.c

.PHONY:clean
clean:
      rm peng1 peng1.o

在写入make命令时,总是先有 ...



peng1.o:peng1.c
      gcc -c peng1.o peng1.c

  |
  |
peng1.o:peng1.c
      gcc -c peng1.c

论坛徽章:
24
15-16赛季CBA联赛之北京
日期:2018-08-17 18:43:33技术图书徽章
日期:2018-08-22 12:53:57技术图书徽章
日期:2018-08-22 12:54:20技术图书徽章
日期:2018-08-22 12:54:3015-16赛季CBA联赛之福建
日期:2018-10-19 16:58:1619周年集字徽章-庆
日期:2019-08-27 13:28:5619周年集字徽章-19
日期:2019-08-27 13:31:2619周年集字徽章-19
日期:2019-08-27 13:31:2615-16赛季CBA联赛之同曦
日期:2019-09-05 12:03:2819周年集字徽章-周
日期:2019-09-06 18:54:5415-16赛季CBA联赛之上海
日期:2018-07-25 11:55:2615-16赛季CBA联赛之青岛
日期:2018-07-10 14:13:18
8 [报告]
发表于 2008-06-26 16:39 |只看该作者
原帖由 MMMIX 于 2008-6-25 21:56 发表

有问题多看看文档

嗯,好. --  上回偷了一次懒. 给自己反省并记过一次.

论坛徽章:
0
9 [报告]
发表于 2008-06-26 17:05 |只看该作者
多谢各位的解答,问题己解决
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP