Tips:make -f 指定的makefile文件
例子4:(多个文件的例子,在同一目录下)
|---sub.c
|---makefile
|---defs.h
|---main.c
|---mult.c
|---add.c
|---div.c
C语言:
/*
* =====================================================================================
* Filename: defs.h
* =====================================================================================
*/
#ifndef _DEFS_H
#define _DEFS_H
int c;
int d;
#endif
/*
* =====================================================================================
* Filename: add.c
* =====================================================================================
*/
#include
#include "defs.h"
add()
{
extern c, d;
printf("加sum c and d=%d\n", c+d);
}
/*
* =====================================================================================
* Filename: sub.c
* =====================================================================================
*/
#include
#include "defs.h"
sub()
{
extern c, d;
printf("substract c and d=%d\n", c-d);
}
/*
* =====================================================================================
* Filename: mult.c
* =====================================================================================
*/
#include
mult()
{
int a=4, b=5;
printf("multiple a by b=%d\n", a*b);
}
/*
* =====================================================================================
* Filename: div.c
* =====================================================================================
*/
#include
div()
{
int a=4, b=5;
printf("除divide a by b=%d\n", a/b);
}
/*
* =====================================================================================
* Filename: main.c
* Description: 主程序
* =====================================================================================
*/
#include
#include "defs.h"
main()
{
extern c,d;
c=4;
d=5;
add();
sub();
mult();
div();
}
如果直接使用gcc编译需要5条命令
gcc -c add.c -o add.o
gcc -c sub.c -o sub.o
gcc -c mult.c -o mult.o
gcc -c div.c -o div.o
gcc -Wall add.o sub.o mult.o div.o main.c -o prog
编写make文件
Makefile语言:
1 myprog: add.o sub.o mult.o div.o
2 gcc main.c add.o sub.o mult.o div.o -o myprog
3 add.o sub.o:defs.h
这样用make命令就可以编译了,但是每次目录里的.o文件很多,如果不需要了可以增加clean标签
用make clean调用
Makefile语言:
1 myprog: add.o sub.o mult.o div.o
2 gcc main.c add.o sub.o mult.o div.o -o myprog
3 add.o sub.o:defs.h
4
5 .PHONY: clean
6 clean:
7 rm *.o
也可以用变量来表示
Makefile语言:
1 objects = add.o sub.o mult.o div.o
2 myprog: $(objects)
3 gcc main.c $(objects) -o myprog
4
5 add.o sub.o:defs.h
6
7 .PHONY: clean
8 clean:
9 rm *.o
例子5:(多个文件在不同目录下)
把所有文件都放在一层目录里肯定很乱,现在分别建立原码目录和头文件目录
|---makefile
|---myprog
|---src
| |---sub.c
| |---main.c
| |---mult.c
| |---add.c
| |---div.c
|---include
| |---defs.h
Makefile语言:
01 vpath %.h include
02 vpath %.c src
03
04 objects = add.o sub.o mult.o div.o
05 myprog: main.c defs.h $(objects)
06 gcc -I include $^ -o myprog
07
08 all: $(objects)
09 $(objects): %.o: %.c
10 gcc -c -I include $< -o $@
11
12 add.o sub.o:defs.h
13
14 .PHONY: clean
15 clean:
16 rm *.o
最后修改过比较规范,编译没有警告信息的源代码
C语言:
01 /*
02 * =====================================================================================
03 // Last Change: 2010-07-03 15:37:22
04 * Filename: defs.h
05 * =====================================================================================
06 */
07 #ifndef _DEFS_H
08 #define _DEFS_H
09 int c;
10 int d;
11 #endif
12
13 /*
14 * =====================================================================================
15 * Filename: add.h
16 * =====================================================================================
17 */
18 void add();
19 /*
20 * =====================================================================================
21 * Filename: add.c
22 * =====================================================================================
23 */
24
25 #include
26 #include "defs.h"
27 #include "add.h"
28 void add()
29 {
30 extern int c, d;
31 printf("999sum c and d=%d\n", c+d);
32 }
33 /*
34 * =====================================================================================
35 * Filename: sub.c
36 * =====================================================================================
37 */
38 #include
39 #include "defs.h"
40 void sub()
41 {
42 extern int c, d;
43 printf("substract c and d=%d\n", c-d);
44 }
45
46 /*
47 * =====================================================================================
48 * Filename: mult.c
49 * =====================================================================================
50 */
51 #include
52 void mult()
53 {
54 int a=4, b=5;
55 printf("000multiple a by b=%d\n", a*b);
56 }
57
58 /*
59 * =====================================================================================
60 * Filename: div.c
61 * =====================================================================================
62 */
63 #include
64 void div()
65 {
66 int a=4, b=5;
67 printf("除divide a by b=%d\n", a/b);
68 }
69
70 /*
71 * =====================================================================================
72 * Filename: main.c
73 * Description: 主程序
74 * =====================================================================================
75 */
76 #include
77 #include "defs.h"
78 #include "add.h"
79
80 extern void sub();
81 extern void mult();
82 extern void div();
83
84 int main()
85 {
86 extern int c,d;
87 c=4;
88 d=5;
89 printf("hello world\n");
90 add();
91 sub();
92 mult();
93 div();
94 return 1;
95 }
阅读(1561) | 评论(0) | 转发(0) |