当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 7 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [问题]关于将一个C文件分成两个c文件如何编译的问题!
帖子发表于 : 2008-08-21 9:01 
头像

注册: 2007-08-05 17:40
帖子: 4968
送出感谢: 0 次
接收感谢: 4
有这样3个文件a.c a.h b.c在同一个文件夹中!
a.c的内容
代码:
#include <stdio.h>
void myprint(char *ch)
{    printf("%s",ch);
}

a.h的内容:
代码:
#include <stdio.h>
void myprint(char *ch);

b.c的内容:
代码:
#include <stdio.h>
#include "a.h"
int main()
{  myprint("abc");
}


-------------------------
我知道用
代码:
gcc a.c b.c
能编译成功。而gcc b.c失败!

------
我想问的是:
1、如果要写一个makefile,该怎么写?是否这样?
代码:
b.o: b.c a.c

2、这里的a.h能不能起到共享自定义函数的作用。更进一步的问题是系统的头文件,内部声明的函数他在那里被实现了?gcc如何了解其实现的位置?
3、extern关键字有什么作用?


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-08-21 9:16 
头像

注册: 2006-04-12 20:05
帖子: 8495
地址: 杭州
送出感谢: 0 次
接收感谢: 8
1.makefile的问题看这个: http://forum.ubuntu.org.cn/viewtopic.ph ... highlight=
2.系统头文件的实现在响应的系统库里面,像math.h里面的东西就在 /lib/libm.so.6 这样的文件里面.
3.这个可以google


_________________
关注我的blog: ε==3


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-08-21 10:19 
头像

注册: 2007-08-05 17:40
帖子: 4968
送出感谢: 0 次
接收感谢: 4
我现在能帮我自己大致的回答一下第2个问题:

能实现自定义函数共享,但要告诉gcc哪里能找到他的实现。对于系统头文件,gcc知道如何找,用ld就清楚gcc是自动找了,(gcc应该是调用了ld,告诉了他搜索路径的,或文件名)


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-08-22 18:54 
头像

注册: 2005-06-28 18:08
帖子: 77
送出感谢: 0 次
接收感谢: 0 次
> 1、如果要写一个makefile,该怎么写?是否这样?
> 代码:
> b.o: b.c a.c

代码:
all: a.o b.o
    gcc a.o b.o -o filename -Wall
a.o: a.c
    gcc a.c -o a.o -c -Wall
b.o: b.c
    gcc b.c -o b.o -c -Wall


大致是这样,-c表示只编译不链接


页首
 用户资料  
 
5 楼 
 文章标题 : Re: [问题]关于将一个C文件分成两个c文件如何编译的问题!
帖子发表于 : 2008-09-01 13:23 

注册: 2006-09-11 22:47
帖子: 2841
送出感谢: 0 次
接收感谢: 4
cnkilior 写道:
1、如果要写一个makefile,该怎么写?是否这样?
代码:
b.o: b.c a.c



改成
代码:
b: a.c


就可以了。

如果你有三个文件:a.c, b.c, c.c,要把它编译成 b,那就是:
代码:
b: a.c c.c


一行 Makefile ,足够搞定大多数问题。


页首
 用户资料  
 
6 楼 
 文章标题 : Re: [问题]关于将一个C文件分成两个c文件如何编译的问题!
帖子发表于 : 2008-09-04 22:27 
头像

注册: 2007-11-05 19:26
帖子: 635
送出感谢: 0 次
接收感谢: 0 次
poet 写道:
cnkilior 写道:
1、如果要写一个makefile,该怎么写?是否这样?
代码:
b.o: b.c a.c



改成
代码:
b: a.c


就可以了。

如果你有三个文件:a.c, b.c, c.c,要把它编译成 b,那就是:
代码:
b: a.c c.c


一行 Makefile ,足够搞定大多数问题。


充分利用make的隐晦规则,有点隐晦啊, :em09


_________________
Everything that has a beginning has an end.


页首
 用户资料  
 
7 楼 
 文章标题 : Re: [问题]关于将一个C文件分成两个c文件如何编译的问题!
帖子发表于 : 2008-09-04 23:00 

注册: 2006-09-11 22:47
帖子: 2841
送出感谢: 0 次
接收感谢: 4
CLOCKWORKHEART 写道:
poet 写道:
cnkilior 写道:
1、如果要写一个makefile,该怎么写?是否这样?
代码:
b.o: b.c a.c



改成
代码:
b: a.c


就可以了。

如果你有三个文件:a.c, b.c, c.c,要把它编译成 b,那就是:
代码:
b: a.c c.c


一行 Makefile ,足够搞定大多数问题。


充分利用make的隐晦规则,有点隐晦啊, :em09


make 的隐含规则就是为了方便使用的。如果你只有一个 hello.c 甚至都根本不需要写 makefile,make hello就可以了。其实掌握make隐含规则能够应付绝大多数的简单应用或者测试应用。——真正的大项目也不可能自己写Makefile了,用那些生成器去了。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 7 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译