分页: 1 / 1
[问题]关于将一个C文件分成两个c文件如何编译的问题!
发表于 : 2008-08-21 9:01
由 cnkilior
有这样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 b.c失败!
------
我想问的是:
1、如果要写一个makefile,该怎么写?是否这样?
2、这里的a.h能不能起到共享自定义函数的作用。更进一步的问题是系统的头文件,内部声明的函数他在那里被实现了?gcc如何了解其实现的位置?
3、extern关键字有什么作用?
发表于 : 2008-08-21 9:16
由 bones7456
1.makefile的问题看这个:
viewtopic.php?t=128278&highlight=
2.系统头文件的实现在响应的系统库里面,像math.h里面的东西就在 /lib/libm.so.6 这样的文件里面.
3.这个可以google
发表于 : 2008-08-21 10:19
由 cnkilior
我现在能帮我自己大致的回答一下第2个问题:
能实现自定义函数共享,但要告诉gcc哪里能找到他的实现。对于系统头文件,gcc知道如何找,用ld就清楚gcc是自动找了,(gcc应该是调用了ld,告诉了他搜索路径的,或文件名)
发表于 : 2008-08-22 18:54
由 lyre
> 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表示只编译不链接
Re: [问题]关于将一个C文件分成两个c文件如何编译的问题!
发表于 : 2008-09-01 13:23
由 poet
cnkilior 写了:1、如果要写一个makefile,该怎么写?是否这样?
改成
就可以了。
如果你有三个文件:a.c, b.c, c.c,要把它编译成 b,那就是:
一行 Makefile ,足够搞定大多数问题。
Re: [问题]关于将一个C文件分成两个c文件如何编译的问题!
发表于 : 2008-09-04 22:27
由 CLOCKWORKHEART
poet 写了:cnkilior 写了:1、如果要写一个makefile,该怎么写?是否这样?
改成
就可以了。
如果你有三个文件:a.c, b.c, c.c,要把它编译成 b,那就是:
一行 Makefile ,足够搞定大多数问题。
充分利用make的隐晦规则,有点隐晦啊,

Re: [问题]关于将一个C文件分成两个c文件如何编译的问题!
发表于 : 2008-09-04 23:00
由 poet
CLOCKWORKHEART 写了:poet 写了:cnkilior 写了:1、如果要写一个makefile,该怎么写?是否这样?
改成
就可以了。
如果你有三个文件:a.c, b.c, c.c,要把它编译成 b,那就是:
一行 Makefile ,足够搞定大多数问题。
充分利用make的隐晦规则,有点隐晦啊,

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