多个C语言代码文件编译示例

多个C语言代码文件编译示例

多个C语言文件的编译在实际项目中会遇到,是模块化编程的重要体现,是必须要学习的。我们先学习一个简单的例子。

我们要实现一个加法和减法操作,将加法和减法看成两个独立的功能,头文件和源文件是分离的,方便给其他开发人员使用。这里需要注意的是,在源文件中提供的可以被外部调用的函数,最好在头文件中声明,避免使用extern关键字。

(1)add.h

#ifndef ADD_H
#define ADD_H

int add(int, int);

#endif

(2)sub.h

#ifndef ADD_H
#define ADD_H

int sub(int, int);

#endif

(3)add.c

#include "add.h"

int add(int a, int b)
{
    return a+b;
}

(4)sub.c

#include "sub.h"

int sub(int a, int b)
{
    return a-b;
}

(5)main.c

#include "add.h"
#include "sub.h"

int main()
{
    int a = 3;
    int b = 4;
    printf("a=%d,b=%d,a+b=%d,a-b=%d\n", a, b, add(a, b), sub(a, b));
    return 0;
}

因为所有头文件都在当前目录,所以不需要指定,直接编译如下:

gcc -o test add.c sub.c main.c

写一个Makefile文件如下:

objects = add.o sub.o main.o
all:$(objects)
    $(CC) -o test $(objects)
$(objects): %.o : %.c
    $(CC) -c $(CFLAGS) $< -o $@
.PHONY:clean
clean:
    rm -rf *.o

编译命令:

make all

清空编译中间文件:

make clean

Makefile文件的好处是:项目文件很多的时候很方便。

再复杂的Makefile文件也是从简单文件开始构建的,不要害怕,继续学,继续用。

该文章会更新,欢迎大家批评指正。

推荐一个零声学院免费公开课程,个人觉得老师讲得不错,
分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容,点击立即学习:
服务器课程:C++服务器

你可能感兴趣的:(Linux·开发基础,c语言,开发语言)