Makefile视频教程
main.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void)
{
int i;
i = 8;
printf("data=%d\n", i);
int a = 9, b = 8;
int c = 0;
c = add(a, b);
printf("add = %d\n", add(a, b));
exit(EXIT_SUCCESS);
}
math.c
#include <math.h>
int add(int a, int b)
{
return a + b;
}
math.h
#ifndef _MATH_H_
#define _MATH_H
int add(int a, int b);
#endif
Makefile
main:main.o math.o
gcc -o main main.o math.o
main.o:main.c math.h
gcc -c main.c
math.o:math.c math.h
gcc -c math.c
clean:
rm *.o
rm main
BUG
Makefile:2: *** 遗漏分隔符 (null)。 停止。
警告:隐式声明函数
- include头文件的时候,自定义的文件用
#include "math.h"
- 系统文件用
#include <stdio.h>
编译命令
make
make clean
makefile中使用的变量
宏定义
objects=main.o math.o
main:$(objects)
gcc -o main $(objects)
main.o:main.c math.h
gcc -c main.c
math.o:math.c math.h
gcc -c math.c
clean:
rm *.o
rm main
![]()
让make自动推导
objects=main.o math.o
main:$(objects)
main.o:main.c math.h
math.o:math.c math.h
clean:
rm *.o
rm main
![]()
清空目标文件的规则
objects=main.o math.o
main:$(objects)
main.o:main.c math.h
math.o:math.c math.h
.PHONY:clean
clean:
rm *.o
rm main
![]()
Makefile:2: *** missing separator. Stop.
指代变量
target=cshell
CC=gcc
CFLAGS=-Wall -g -c
$(target):code.o
$(CC) -o $(target) code.o
code.o:code.c
$(CC) $(CFLAGS) code.c
.PHONY: clean all
clean:
rm -f *.o
rm -f $(target)
$^和$@
![]()
%.o:%.c
![]()