多文件编译存在的价值:
在真实的工作环境中,我们不可能把所有代码全部写在一个文件中。因此,我们需要学习多文件编译。
多文件编译的框架
在一个大的目录里,我们先创建include、bin、obj、src几个文件夹,同时,在这个大的目录和src文件夹、obj文件夹中分别创建makefile文件。
然后把编写好的main.c文件(主文件,包含所有代码)放到src文件夹中。之后,在src文件夹中创建func1.c 、func2.c、func3.c等.c 文件,这些新创建的.c文件用于存放main.c文件中调用到的子函数。
在将这一步执行完后,我们会得到一个只剩下头文件和int main()的main.c文件以及一堆子函数文件。这时,我们需要在include文件中建立一个main.h文件,再把main.c文件中的头文件以及一堆子函数文件的函数声明放进去。
同时,在往src文件夹中的所有.c加上 #include "../include/main.h"的前缀,以保证在编译的时候会调用这些头文件。要注意的是,因为编译会将所有.c文件编译成一个可运行文件,彼此会发生大量的声明冲突,为避免这种情况,我们还需要给main.h函数加上一层框架,把头文件内容放#ifndef和#endif中。
在这里, 头文件main.h 要写成_MAIN_H_(两边空格和文件名内部.要替换成_)。
在所有准备工作完成后,就可以开始makefile文件的编写了。
为了便于理解,我们从src文件夹中的makefile文件开始编译。
这里,先介绍一下makefile文件的基本格式:
‘
这句代码的意思是只把做good.c文件成obj文件,然后将这个obj文件命名为good.o文件。
这行代码的意思则是将所有生成的.o文件放到obj文件夹中。
到这里,src文件夹内的内容编写完毕,我们进入到obj文件夹中。
这里,我们首先把所有.o文件进行最后一步处理,生成.out文件,然后将其重命名为MyStruct,最后将这个文件放在bin文件夹中。
现在,只剩下最后主目录中的makefile文件的编写了。
编写完成后,我们来到主目录,输入make,直接运行主目录下的makefile文件,之后,便能在bin文件夹中看见我们生成的MyStruct文件(.out文件)。
输入./MyStruct,运行文件,程序运行:
至此,整个多文件编译过程结束。