LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 985|回复: 4

[求助]Makefile入门求助 -- 已解决

[复制链接]
发表于 2008-11-4 13:01:32 | 显示全部楼层 |阅读模式
有下列几个文件
目录结构
Proj--
       |--list--
       |        |--list.c
       |        |--list.h
       |        |--main.c
       |--fatal.h
       |--fatal.c
如果直接gcc编译
gcc list.c ../fatal.c main.c -o list

没有问题
但是如果把过程拆分成如下步骤就有问题了
list : list.o main.c
     gcc list.o main.c -o list

list.o : fatal.o list.c list.h
     gcc list.c fatal.o -o list

fatal.o : ../fatal.c ../fatal.h
     gcc -c fatal.c

这样在list.o那边就会报下面这个错误
(.text+0x20): undefined reference to `main'


不知道如何解决?
说明一下:我的想法是想把main函数所在的文件跟具体的实现API分开

sigh,初学gcc跟GNU Makefile,一头雾水
 楼主| 发表于 2008-11-4 13:09:45 | 显示全部楼层
补充一下,list.c中有调用fatal.h定义的函数
回复 支持 反对

使用道具 举报

发表于 2008-11-4 13:52:41 | 显示全部楼层
这个错误和 make 应该没关系吧,在 list.o 那边你的 gcc 少了个 "-c" 选项。还有如果只是编译的话,“.o”文件也需要?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-4 16:07:53 | 显示全部楼层
Post by eieng;1903704
这个错误和 make 应该没关系吧,在 list.o 那边你的 gcc 少了个 "-c" 选项。还有如果只是编译的话,“.o”文件也需要?

[quote]gcc -c list.c fatal.o -o list.o
gcc: fatal.o:未使用链接器输入文件,因为链接尚未完成[quote]

多上 -c 会出现这个问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-4 16:13:06 | 显示全部楼层
还是Makefile写错了
Makefile如下
list : list.o fatal.o
        gcc main.c list.o fatal.o -o list

list.o : list.c list.h
        gcc -c list.c  -o list.o

fatal.o : ../fatal.c ../fatal.h
        gcc -c ../fatal.c -o fatal.o

看来还是对整个程序的编译链接过程还不是太熟悉,继续好好学习
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表