makefile的编写:由浅入深

准备文件

// fun1.c
#include <stdio.h>
void fun1()
{
    printf("this is fun1\n");	

}
// fun2.c
#include <stdio.h>
void fun2()
{
    printf("this is fun2\n");	
}
//head.h
void fun1();
void fun2();
int sum(int len);
//sum.c
#include <stdio.h>

int sum(int len)
{
	int i = 0;
	int sum = 0;
	for(i=0; i<len; i++)
	{
		sum += i;
	}

	return sum;
}
//main.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include "head.h"

int main(int argc, char *argv[])
{
    printf("this is main!\n");
	int i = 0;
	for(i=0; i<argc; i++)
	{
		printf("[%d]:[%s]\n", i, argv[i]);
	}

    fun1();
    fun2();

	printf("sum(10)==[%d]\n", sum(10));

    return 0;
}

Makefile版本一

在这里插入图片描述

main: main.c fun1.c fun2.c sum.c
	gcc -o main main.c fun1.c fun2.c sum.c

Makefile版本二

在这里插入图片描述
在这里插入图片描述

main:main.o fun1.o fun2.o sum.o
	gcc -o main  main.o fun1.o fun2.o sum.o

main.o: main.c
	gcc -c main.c -I./

fun1.o: fun1.c
	gcc -c fun1.c
	
fun2.o: fun2.c
	gcc -c fun2.c

sum.o: sum.c
	gcc -c sum.c

Makefile版本三

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

target = main
objects = main.o fun1.o fun2.o sum.o
CC = gcc
CPPFLAGS = -I./

#这里的$(objects)不能替换成$^,因为此处是条件,不是命令
$(target): $(objects) 
	$(CC) -o $@ $^

%.o: %.c
	$(CC) -c $< $(CPPFLAGS)

###########################################

#main.o: main.c
#	$(CC) -c $< $(CPPFLAGS)

#fun1.o: fun1.c
#	$(CC) -c $<
	
#fun2.o: fun2.c
#	$(CC) -c $<

#sum.o: sum.c
#	$(CC) -c $<

Makefile版本四

在这里插入图片描述

target = main

src = $(wildcard *.c)
objects = $(patsubst %.c, %.o, $(src))
#objects = main.o fun1.o fun2.o sum.o

CC = gcc
CPPFLAGS = -I./

#这里的$(objects)不能替换成$^,因为此处是条件,不是命令
$(target): $(objects) 
	$(CC) -o $@ $^

%.o: %.c
	$(CC) -c $< $(CPPFLAGS)

###########################################

#main.o: main.c
#	$(CC) -c $< $(CPPFLAGS)

#fun1.o: fun1.c
#	$(CC) -c $<
	
#fun2.o: fun2.c
#	$(CC) -c $<

#sum.o: sum.c
#	$(CC) -c $<

Makefile版本五

在这里插入图片描述

target = main
src = $(wildcard *.c)
objects = $(patsubst %.c, %.o, $(src))
CC = gcc
CPPFLAGS = -I./

$(target): $(objects) 
	$(CC) -o $@ $^

%.o: %.c
	$(CC) -c $< $(CPPFLAGS)

#clean和前面的命令没有依赖关系
.PHONY: clean
clean:
	rm -f $(objects) $(target)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大大枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值