【makefile】 $@ $^ %< 的使用
假设有下面这样的一个程序,源代码如下:
1 /* main.c */ 2 #include "mytool1.h" 3 #include "mytool2.h" 4 5 int main(int argc,char **argv) 6 { 7 mytool1_print("hello"); 8 mytool2_print("hello"); 9 } 10 11 /* mytool1.h */ 12 #ifndef _MYTOOL_1_H 13 #define _MYTOOL_1_H 14 15 void mytool1_print(char *print_str); 16 17 #endif 18 19 /* mytool1.c */ 20 #include "mytool1.h" 21 22 void mytool1_print(char *print_str) 23 { 24 printf("This is mytool1 print %s\n",print_str); 25 } 26 27 /* mytool2.h */ 28 #ifndef _MYTOOL_2_H 29 #define _MYTOOL_2_H 30 31 void mytool2_print(char *print_str) ; 32 33 #endif 34 35 /* mytool2.c */ 36 #include "mytool2.h" 37 38 void mytool2_print(char *print_str) 39 { 40 printf("This is mytool2 print %s\n",print_str); 41 }
常规的Makefile的文件是:
main:main.o mytool1.o mytool2.o gcc -o main main.o mytool1.o mytool2.o main.o:main.c mytool1.h mytool2.h gcc -c main.c mytool1.o:mytool1.c mytool1.h gcc -c mytool1.c mytool2.o:mytool2.c mytool2.h gcc -c mytool2.c
Makefile有三个重要的变量,分别如下:
1. $@ :目标文件
2. $^ 所有的依赖文件
3. $< 第一个依赖文件
如果我们使用上面三个变量,那么我们可以简化我们的Makefile文件为:
main:main.o mytool1.o mytool2.o gcc -o $@ $^ main.o:main.c mytool1.h mytool2.h gcc -c $< mytool1.o:mytool1.c mytool1.h gcc -c $< mytool2.o:mytool2.c mytool2.h gcc -c $<