多个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++服务器