本博客通过一个简单的案例介绍makefile的使用
1. 代码
2. bar.c
#include "bar.h"
int find_min(int arr[], int n){
int i = 0;
int m = arr[0];
for(i = 0; i < n; i++){
if(arr[i] < m){
m = arr[i];
}
}
return m;
}
3. bar.h
#ifndef _BAR_
int find_min(int arr[], int n);
#endif // !_BAR_
4. foo.c
#include "foo.h"
int find_max(int arr[], int n){
int i = 0;
int m = arr[0];
for(i = 0; i < n; i++){
if(arr[i] > m){
m = arr[i];
}
}
return m;
}
5. foo.h
#ifndef _BAR_
int find_max(int arr[], int n);
#endif // !_BAR_
6. main_max.c
#include <stdio.h>
#include "foo.h"
#include "bar.h"
int main() {
int arr[5] = {1, 8, 6, 3, 4};
int max = find_max(arr, 5);
printf("max = %d\n", max);
return 0;
}
7. main_min.c
#include <stdio.h>
#include "foo.h"
#include "bar.h"
int main() {
int arr[5] = {1, 8, 6, 3, 4};
int min = find_min(arr, 5);
printf("min = %d\n", min);
return 0;
}
8. makefile
makefile的基本格式:
目标文件: 依赖文件
命令
生成多个目标文件使用all关键字。
设置变量例如 CC=gcc,使用的时候$(CC) 即表示gcc
clean是伪目标,前面的.PHONY: clean可以省略。命令里面可以写删除中间文件等文件的命令。
CC = gcc
CFLAGS = -lm -Wall -g
all: main_max main_min
main_max: main_max.c foo.o bar.o
$(CC) $(CFLAGS) main_max.c foo.o bar.o -o main_max
main_min: main_min.c foo.o bar.o
$(CC) $(CFLAGS) main_min.c foo.o bar.o -o main_min
foo.o: foo.c
$(CC) $(CFLAGS) -c foo.c
bar.o: bar.c
$(CC) $(CFLAGS) -c bar.c
clean:
rm *.o main_max main_min
9. 运行结果