通用型makefile

在含有多个.c源文件的工程中,可以通过编写makefile来进行工程管理

makefile在工程目录下一般起名为"makefile"或"Makefile"

本makefile适用于大学阶段遇到的工程(也就是说大学阶段用这个makefile基本就够了)

# 通用型makefile

# 利用bash命令 找到当前目录下的所有的.c文件,
# 再存放到变量CSOURCE中
CSOURCE=${shell find . -name "*.c"}
# 如果有其他路径下的.c文件 还可以 用 CSOURCE+= 来添加

# 文本替换
# 将变量COBJ中的.c文本替换为.o文本
OBJ=$(CSOURCE:.c=.o)

# 将编译参数存放到变量CFLAG中,
# 如果还有其他的头文件路径,可以用 CFLAGS+= 来添加
# 编译参数有:显示所有警告,包含的头文件路径
CFLAGS=-Wall  -I./

# 将要生成的工程的名字放到变量BIN中
# 编译指令: make project 或 make ./project
BIN=./project

# 将编译器的名字放到变量CC中
# Linux / windows 用的是:  gcc
# 嵌入式arm平台用的是:      arm-linux-gcc
CC=gcc

pri:
	@echo $(CSOURCE)
	@echo $(OBJ)

$(BIN):$(OBJ)  
	$(CC) $^ -o $@  $(CFLAGS) 

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

# 定义伪目标 clean
# 如果当前目录下有"clean"这个可执行的程序,
# 在终端执行make clean这个指令的时候,不会发生冲突,
# 会正常执行以下的代码
.PHONY:clean
clean:
	rm $(OBJ) $(BIN)

--------------------------------------------------------------------------------------------------------------------------------

测试工程

  • 工程目录下的结构:

        

  •         Makefile文件的内容:(这里CFLAGS中多添加了头文件的路径)
# 通用型makefile

# 利用bash命令 找到当前目录下的所有的.c文件,
# 再存放到变量CSOURCE中
CSOURCE=${shell find . -name "*.c"}
# 如果有其他路径下的.c文件 还可以 用CSOURCE+=来添加

# 文本替换
# 将变量COBJ中的.c文本替换为.o文本
OBJ=$(CSOURCE:.c=.o)

# 将编译参数存放到变量CFLAG中,
# 如果还有其他的头文件路径,可以用 CFLAGS+= 来添加
# 编译参数有:显示所有警告,包含的头文件路径
CFLAGS=-Wall  -I./
CFLAGS+= -I./hi/

# 将要生成的工程的名字放到变量BIN中
# 编译指令: make project 或 make ./project
BIN=./project

# 将编译器的名字放到变量CC中
# Linux / windows 用的是:  gcc
# 嵌入式arm平台用的是:      arm-linux-gcc
CC=gcc

pri:
	@echo $(CSOURCE)
	@echo $(OBJ)

$(BIN):$(OBJ)  
	$(CC) $^ -o $@  $(CFLAGS) 

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

# 定义伪目标 clean
# 如果当前目录下有"clean"这个可执行的程序,
# 在终端执行make clean这个指令的时候,不会发生冲突,
# 会正常执行以下的代码
.PHONY:clean
clean:
	rm $(OBJ) $(BIN)
  •         main.c文件内容:
// main.c
#include <stdio.h>

#include "hello.h"
#include "hi.h"

int main(void)
{
    print_hello();
    print_hi();
    return 0;
}

  •         hello.h文件内容:
// hello.h
#ifndef __HELLO_H
#define __HELLO_H

void print_hello(void);

#endif

  •         hello.c文件内容:
// hello.c
#include <stdio.h>

#include "hello.h"

void print_hello(void)
{
    printf("Hello World! I'm coming!\n");
}

  •         /hi/hi.h文件内容:
// hi.h
#ifndef __HI_H
#define __HI_H

void print_hi(void);

#endif

  •         /hi/hi.c文件内容:
// hi.c
#include <stdio.h>

#include "hi.h"

void print_hi(void)
{
    printf("Hi! I heard what you said.\n");
}

--------------------------------------------------------------------------------------------------------------------------------

在当前的工程路径的终端输入:(下面的project是在makefile文件中写好的最终要生成的可执行文件的名称,可以到makefile文件中修改成自己想要的名称,例如 修改成demo,在终端make时就要输入 " make demo ")

make project

终端反馈的运行结果:

执行生成的目标文件,在终端输入:

./project

运行结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值