C语言多文件编译详解
一个大型工程要分割成很多文件,让整个开发框架更加清晰,提高开发效率,对于刚学习C语言的童鞋们(我也是),平时我们写一个程序就一个.c文件,长篇大论,思维混乱,显得不太专业,那么我们就需要用到多个文件来分类存放,头文件、源文件等,想让各个文件联动,然后跑起来就需要进行多文件编译处理。
首先,我们新建一个工程文件夹命名为:mutil_file
mkidr mutil_file
再mutil_file文件夹下
新建头文件夹heander,再新建一个test.h和max.h文件
mkidr heander
cd heander
touch test.h
touch max.h
新建源文件夹source,再新建test.c和max.c文件
mkdir source
cd source
touch test.c
touch max.c
用来存放执行程序的output文件夹
mkdir output
主函数main.c文件
touch main.c
tree命令~目录结构如下
在test.h文件写入以一下内容
/* #ifndef _TEST_H_ //这是个函数原型
#define _TEST_H_
#endif
*/
#ifndef _TEST_H_
#define _TEST_H_
#pragma once//对<sttdio.h>头文件引用限制,不管此头文件会被引用多少次,只需定义一次
#include <stdio.h>
void test_print_message();//定义了一个输出字符函数
#endif
在max.h文件写入以下内容
#ifndef _MAX_H_
#define _MAX_H_
int max_int_two(int a, int b);//定义了一个进行数值交换的函数
#endif
在test.c文件写入以下内容
#include "../heander/test.h"
void test_print_message()
{
printf("test test test");
}
在max.c文件写入以下内容
#include "../heander/max.h"
int max_int_two(int a, int b)
{
return a > b ? a : b;
}
到这里,很多小伙伴就会有疑问了
为什么是用“ ”,而不是< >?
为什么要加上路径不加上路径会怎么样?
1、<> 尖括号从系统根目录进行查找相对应的头文件
echo $PATH
查看环境变量位置
cp test_heander.h /usr/local/bin/
复制.h文件到环境变量中还是无法解决
2、" "双引号先从当前源文件查找,如果查找不到,再到系统目录查找
需要注意的是:如果文件和源文件不在同一目录,需要引用相对路径
问题解决了!
接下来在在main.c文件写入以下内容
#include "heander/test.h"
#include "heander/max.h"
int main(int argc, char **argv)
{
test_print_message();
int res = max_int_two(99, 1000);
printf("%d", res);
return 0;
}
在mutil_file目录下进行编译处理
gcc main.c source/test.c source/max.c -o output/result
再output目录下就会生成一个result执行文件
cd output
./resule
每一次编译执行都要输入这么长的命令,会不会太繁琐了?
所以呢,为了执行方便,我们可以做一个脚本
code build.sh
将gcc main.c source/test.c source/max.c -o output/result写进去然后保存退出
执行命令:sh build.sh
这样就显得比较ok一些!
或者再加一步,输入命令chmod +x build.sh
执行命令:./build.sh
也可以
sh build
以及./build.sh
就直接替换了命令:gcc main.c source/test.c source/max.c -o output/result
然后./resule
就可以了
你学废了没?
这着教程只是一个示范,小编也是刚刚学会,有什么写得不对的地方多多包涵,大家可以举一反三,来应用,当我们开发一个大项目的时候,肯定是一个团队再做这个事情,多个文件处理就会显得很重要了。