how-to-makefile(入门篇)?
单个c文件
#include<stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
makefile 文件
hello: hello.c
gcc hello.c -o hello
两个c文件
#filename: makefile
getMax: max.o main.c
gcc max.o main.c -o getMax
max.o: max.c
gcc -c max.c
clean:
rm *.o
rm getMax
//filename: max.h
#include<stdio.h>
int getMax(int *array);
//filename: max.c
#include "max.h"
int getMax(int *array)
{
int i, max = array[0];
for ( i = 1; i < 5; i++)
{
if(array[i] > max)
{
max = array[i];
}
}
return max;
}
//filemame: main.c
#include "max.h"
int main()
{
int array[] = {1, 3, 5, 7, 9};
printf("max = %d\n", getMax(array));
}
多个c文件
#filename: makefile
main: max.o min.o main.c
gcc max.o min.o main.c -o main
max.o:
gcc -c max.c
min.o:
gcc -c min.c
clean:
rm *.o
rm main
//filename: tool.h
#include<stdio.h>
int getMax(int *array);
int getMin(int *array);
//filename: max.c
#include "tool.h"
int getMax(int *array)
{
int i, max = array[0];
for ( i = 1; i < 5; i++)
{
if(array[i] > max)
{
max = array[i];
}
}
return max;
}
//filename: min.c
#include "tool.h"
int getMin(int *array)
{
int i, min = array[0];
for ( i = 1; i < 5; i++)
{
if(array[i] < min)
{
min = array[i];
}
}
return min;
}
//filename: main.c
#include "tool.h"
int main()
{
int array[] = {1, 3, 5, 7, 9};
printf("max = %d\n", getMax(array));
printf("min = %d\n", getMin(array));
}
生成多个可执行程序
第一行加上all即可
#filename: makefile
all: getMax getMin
getMax: max.o main_max.c
gcc max.o main_max.c -o getMax
getMin: min.o main_min.c
gcc min.o main_min.c -o getMin
max.o: max.c
gcc -c max.c
min.o: min.c
gcc -c min.c
clean:
rm *.o
rm getMax
rm getMin
//filename: tool.h
#include<stdio.h>
int getMax(int *array);
int getMin(int *array);
//filename: max.c
#include "tool.h"
int getMax(int *array)
{
int i, max = array[0];
for ( i = 1; i < 5; i++)
{
if(array[i] > max)
{
max = array[i];
}
}
return max;
}
//filename: min.c
#include "tool.h"
int getMin(int *array)
{
int i, min = array[0];
for ( i = 1; i < 5; i++)
{
if(array[i] < min)
{
min = array[i];
}
}
return min;
}
//filename: main_max.c
#include "tool.h"
int main()
{
int array[] = {1, 3, 5, 7, 9};
printf("max = %d\n", getMax(array));
}
//filename: main_min.c
#include "tool.h"
int main()
{
int array[] = {1, 3, 5, 7, 9};
printf("min = %d\n", getMin(array));
}
总结:
makefile的写法
先写生成的可执行程序
后面跟依赖文件
下面再接着写依赖文件
直到全部写完
以两个c文件举例
makefile中其他的都是装饰而已
将两个c文件的那个makefile包装一下
CC = gcc
#目标程序
TARGET = getMax
#所有c文件
SRCS = $(wildcard *.c)
#把c文件名替换成.o文件
OBJS = $(patsubst %c, %o, $(SRCS))
#/防止目录中有这些文件,造成冲突
.PHONY: all clean
#主体
all: $(TARGET)
$(TARGET): $(OBJS)
$(CC) $(OBJS) -o $(TARGET)
$(OBJS):
$(CC) -c $(SRCS)
clean:
rm -f $(OBJS) $(TARGET)
就完美了