曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 6628|回复: 0
打印 上一主题 下一主题

gcc 多源文件的编译方法

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2008-11-16 23:02:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果有多个源文件,基本上有两种编译方法:
[假设有两个源文件为test.c和testfun.c]

一个源程序可以分成几个文件。这样便于编辑与理解,尤其是程序非常大的时候。这也使各部分独立编译成为可能。
下面的例子中我们将程序 Hello World 分割成 3 个文件:‘main.c’,‘hello_fn.c’和头文件‘hello.h’。这是主程序‘main.c’:
#include "hello.h"
int
main(void)
{
    hello ("world");
    return 0;
}
在先前的例子‘hello.c’中,我们调用的是库函数 printf,本例中我们用一个定义在文件‘hello_fn.c’中的函数 hello 取代它。
主程序中包含有头文件‘hello.h’,该头文件包含函数 hello 的声明。我们不需要在‘main.c’文件中包含系统头文件‘stdio.h’来声明函数 printf,因为‘main.c’没有直接调用 printf
文件‘hello.h’中的声明只用了一行就指定了函数 hello 的原型。
void hello (const char * name);
函数 hello 的定义在文件‘hello_fn.c’中:
#include <stdio.h>
#include "hello.h"

void
hello (const char * name)
{
printf ("Hello, %s!\n", name);
}
语句 #include "FILE.h"#include <FILE.h> 有所不同:前者在搜索系统头文件目录之前将先在当前目录中搜索文件‘FILE.h’,后者只搜索系统头文件而不查看当前目录。
要用gcc编译以上源文件,使用下面的命令:
$ gcc -Wall main.c hello_fn.c -o newhello本例中,我们使用选项 -o 为可执行文件指定了一个不同的名字 newhello。注意到头文件‘hello.h’并未在命令行中指定。源文件中的的 #include "hello.h" 指示符使得编译器自动将其包含到合适的位置。
要运行本程序,输入可执行文件的路径名:


2. 分别编译各个源文件,之后对编译后输出的目标文件链接。
用法:
#gcc -c testfun.c //将testfun.c编译成testfun.o
#gcc -c test.c //将test.c编译成test.o
#gcc -o testfun.o test.o -o test //将testfun.o和test.o链接成test

以上两种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-4 20:36 , Processed in 0.080585 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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