Makefile-基础脚本

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)。 停止。

  • gcc、rm、cp前面是tab分割符,不能用空格

警告:隐式声明函数

  • include头文件的时候,自定义的文件用 #include "math.h"
  • 系统文件用#include <stdio.h>

编译命令

make
make clean

makefile中使用的变量

  • 文件名字:Makefile\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自动推导

  • 删除了gcc -c main.c
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.

  • command前面是需要TAB,不是空格

指代变量

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

posted @ 2022-05-12 22:49  starc的miao  阅读(144)  评论(0)    收藏  举报