【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 }
View Code

常规的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 $<

 

参考资料

1. 跟我一起学makefile

posted @ 2021-03-14 22:01  苏格拉底的落泪  阅读(699)  评论(0编辑  收藏  举报