打印
[嵌入式linux]

关于Makefile中头文件编译的疑惑

[复制链接]
2089|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jiyiche|  楼主 | 2009-12-16 17:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
myprog: main.o BST.o      
gcc -g -o myprog main.o BST.o
main.o: main.c BST.h
gcc -c -g main.c
BST.o: BST.c BST.h
gcc -c -g BST.c
clean:
rm -f myprog main.o BST.o

这个Makefile当中,为什么不用对BST.h进行编译呢?如果我在gcc -c -g main.c后面加上BST.h,则会出错,这是为什么?难道不用对自己定义的头文件进行编译就可以运行了吗?

相关帖子

沙发
sinanjj| | 2009-12-16 18:20 | 只看该作者
看看出的错不就知道了.


那错误说的应该很明白

使用特权

评论回复
板凳
jiyiche|  楼主 | 2009-12-16 18:42 | 只看该作者
错误提示重复编译头文件

使用特权

评论回复
地板
一朝成名| | 2009-12-17 11:47 | 只看该作者
#include 已经包含~

防止重复 要在.h中增加
#ifndef      BST_H
#define      BST_H

...
...


#endif

使用特权

评论回复
5
sinanjj| | 2009-12-17 12:16 | 只看该作者
不是要加防止重复的定义.

而是, 在C文件中就include h文件了, 又在编译的时候指定一回, 相当于声明了函数/变量 两次. 不重复才怪.

想想include 干了什么不就明白了.



这种问题LZ就该自己反思反思..............

使用特权

评论回复
6
jiyiche|  楼主 | 2009-12-18 01:42 | 只看该作者
但是如果只输入gcc -g -o myprog main.c BST.h BST.c就不会报错,楼上的兄弟,这是为什么呢?

使用特权

评论回复
7
sinanjj| | 2009-12-18 09:46 | 只看该作者
直接生成文件也会被分解为编译, 连接.
可以这么理解:
gcc -g -o myprog main.c BST.h BST.c 等价为:
gcc -c main.c
gcc -c BST.h
gcc -c BST.c

gcc -o myprog main.o bst.o

实际上连接是调用ld, gcc只是个封装. 这里的解释不一定对, 但意思是这个意思.

使用特权

评论回复
8
jiyiche|  楼主 | 2009-12-19 01:28 | 只看该作者
恩,但是上面那个是正确的:gcc -g -o myprog main.c BST.h BST.c。
呵呵,不知道为什么,当时用Makefile就出错,现在没问题了,可以在每个gcc后面加上BST.h

使用特权

评论回复
9
lelee007| | 2009-12-22 09:22 | 只看该作者
:L

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

176

主题

484

帖子

0

粉丝