/* main.c */ #include "mytool1.h" #include "mytool2.h" #include<stdio.h> int main(int argc,char **argv) { mytool1_print("hello"); mytool2_print("hello"); }
/* mytool1.h */ #ifndef _MYTOOL_1_H #define _MYTOOL_1_H void mytool1_print(char *print_str); #endif
/* mytool1.c */ #include "mytool1.h" void mytool1_print(char *print_str) { printf("This is mytool1 print %s ",print_str); }
/* mytool2.h */ #ifndef _MYTOOL_2_H #define _MYTOOL_2_H void mytool2_print(char *print_str); #endif
/* mytool2.c */ #include "mytool2.h" void mytool2_print(char *print_str) { printf("This is mytool2 print %s ",print_str); }
<请注意以上代码中的标点符号是否在英文状态下输入>
当然由于这个程序是很短的我们可以这样来编译main:main.o mytool1.o mytool2.o TAB gcc -o main main.o mytool1.o mytool2.o main.o:main.c mytool1.h mytool2.h TAB gcc -c main.c mytool1.o:mytool1.c mytool1.h TAB gcc -c mytool1.c mytool2.o:mytool2.c mytool2.h TAB gcc -c mytool2.c<上面的TAB是需要按TAB补空格,不能按空格键。按完TAB后直接输gcc就行,不要加空格>
下面我们学习Makefile是如何编写的。
在Makefile中也#开始的行都是注释行.Makefile中最重要的是描述文件的依赖关系的说明。一般的格式是:
target:components第一行表示的是依赖关系。第二行是规则, 比如说我们上面的那个Makefile文件的第二行 。
main:main.o mytool1.o mytool2.o
表示我们的目标(target)main的依赖对象(components)是main.o mytool1.omytool2.o 当倚赖的对象在目标修改后修改的话,就要去执行规则一行所指定的命令。就象我们的上面那个Makefile第三行所说的一样要执行 gcc-o main main.o mytool1.o mytool2.o 注意规则一行中的TAB表示那里是一个TAB键
Makefile有三个非常有用的变量。分别是$@,$^,$<代表的意义分别是:
$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件。
如果我们使用上面三个变量,那么我们可以简化我们的Makefile文件为: