Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1738718
  • 博文数量: 410
  • 博客积分: 9563
  • 博客等级: 中将
  • 技术积分: 4517
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-03 19:59
个人简介

文章分类

全部博文(410)

文章存档

2017年(6)

2016年(1)

2015年(3)

2014年(4)

2013年(32)

2012年(45)

2011年(179)

2010年(140)

分类: C/C++

2010-07-03 20:08:32

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) |
给主人留下些什么吧!~~