前言
这一段时间抽空看了下Makefile的一些基本的写法,以下是我的个人见解
Makefile Linux或者类Linux操作系统下进行代码管理的一种常用的工具,为我们代码的编译和管理带来了巨大的便利,
但是学起来并不是那么容易
以下通过一个简单的例子进行分析:这是个简单的排序程序
example.cpp
1
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include "lib.h"
5
6 int main()
7 {
8 int i=0, num=0, *array=NULL;
9 while(num <= 0){
10 printf("\nPlease enter the number of elements:\n");
11 scanf("%d",&num);
12 if(num > 0)
13 break;
14 }
15
16 if(NULL == (array = (int *)malloc(num*sizeof(int)))) {
17 printf("malloc failed!\n");
18 exit(-1);
19 }
20
21 printf("Please enter the elements(total %d):\n", num);
22
23 for(i = 0; i<num; i++){
24 printf("\nNo.%d:\t", i);
25 scanf("%d", array+i);
26 }
27 sort(array, num); //调用lib.c
28 printf("=========================\nthe result is:\n");
29 for(i = 0; i<num; i++) {
30 printf("%d:\t%d\n", i, *(array+i));
31 }
32 free(array);
33 return 0;
34 }
lib.cpp
1 #include<stdio.h>
2
3
4 int sort(int s[],int r)
5 {
6 int i=0,j=0,temp=0;
7 for(i=0;i<r-1;i++)
8 for(j=0;j<r-1;j++)
9 {
10 if(s[j]<s[j+1]){
11 temp=s[j];
12 s[j]=s[j+1];
13 s[j+1]=temp;}
14 printf("f00ffff");
15 }
16
17 return 0;
18 }
lib.h
int sort(int s[],int r);
Makefile
1 CC = gcc
2
3
4 EXEC = example
5 OBJS = example.o lib.o
6
7 all: $(EXEC)
8 $(EXEC): $(OBJS)
9 $(CC) $(EXEC) -o $(OBJS)
10 example.o: example.cpp
11 $(CC) example.o -o example.c
12 lib.o: lib.cpp
13 $(CC) lib.o -o lib.c
14 .PHONY:clean
15 clean:
16 rm -i *.o
以上是两个c文件,和一个库文件,及一个Makefile文件,将四个文件放到一个文件夹下,执行make 命令即可编译运行,实现数据的录入和排序。
先说下程序的结构,在example.cpp中我调用了一个排序函数来进行排序,而排序函数被我写在了另一个c文件中。
我们主要来分析下Makefile的主要内容:
前5行主要定义变量和路径的填充;中间的一部分主要是依赖关系的构建的命令的执行(要注意一点,命令前面那些缩进不是空格,而是tab,若打成空格会出现报错),最后一部分是一个清除文件的一个伪目标,可以在编译完成后执行make clean 命令,来清楚文件夹下的一些 .o 文件,使我们Windows下的obj文件,也称为目标文件
以上是我的一些关于Makefile 的基本认知,欢迎大家评论。