[linux]记录一次makefile的相关使用

发布时间 2023-05-31 22:14:15作者: 七色彩虹k

问题

设某个程序由四个C语言源文件组成,分别是a.c、b.c、c.c、d.c,其中b.c和d.c都使用了defs.h中的声明,最后生成的可执行文件名为pgm。试为该程序编写相应的makefile文件。

程序

a.c

#include "defs.h"

void a()
{
    printf("a\n");
}

int main()
{
    a();
    b();
    c();
    d();
    printf("lunix\n");
    return 0;
}

b.c

#include "defs.h"
void b()
{
    printf("b\n");
}

c.c

#include "defs.h"
void c()
{
    printf("c\n");
}

d.c

#include "defs.h"
void d()
{
    printf("d\n");
}

defs.h

#include <stdio.h>
extern void a();
extern void b();
extern void c();
extern void d();
extern int main(); // 声明main函数,不要定义它

makefile

CC = gcc
CFLAGS = -Wall -Wextra -std=c11

SRCS = a.c b.c c.c d.c
OBJS = $(SRCS:.c=.o)
DEPS = defs.h
TARGET = pgm

all: $(TARGET)

$(TARGET): $(OBJS)
	$(CC) $(CFLAGS) $^ -o $@

%.o: %.c $(DEPS)
	$(CC) $(CFLAGS) -c $< -o $@

clean:
	rm -f $(OBJS) $(TARGET)

注意:makefil文件编写时应注意空格和tab键的区别,在上述程序中,使用了tab

运行

先make一下

发现生成了一些文件

运行可执行文件pgm