菜鸟学linux-我的第一个makefile

1. makefile用来干什么的?

    复杂的定义我不知道,只知道它是用来干vc6++一个很骚气的动作(一键编译)。

2. makefile怎么做到vc6++的一键编译呢?

    先来看下磁盘中文件的组成,一个test文件夹,test包含了adc led uart 3个文件夹和一个main.cpp 与 makefile文件(.vscode文件夹忽略)。写好程序和makefile文件后,打开shell终端,cd到test文件目录下,然后执行make即可。如下图所示。

 

3. makefile怎么写呢?

    基于2的文件架构,下面是对应的makefile文件。后期如果要增加文件夹,直接在VPATH中加入文件夹路径即可。推荐看GNU make, GCC编译相关知识。

# 指定makefile搜索路径
VPATH = led uart adc
# 是否需要生成GDB调试信息
DEBUG = -g
# 编译警告
WARNNING = -Wall
# 编译器优化等级
OPTIMIZATION = -o1
# 指定编译使用的指令
CC = g++
# 指定编译器头文件搜索目录
INCLUDE = $(foreach n, $(VPATH), -I $(n)) 
# 编译器使用c++11
STDCPP11 = -std=c++11
# 组合各个编译选项
CFLAGS = $(DEBUG) $(WARNNING) $(OPTIMIZATION) $(STDCPP11) $(INCLUDE)
# 链接动态库
LINKS = -lpthread
# 生成的目标/可执行文件的名称
TARGET = main
# 取出所有makefile当前目录和VPATH指定目录的.cpp文件
FILES = *.cpp $(foreach n, $(VPATH), $(n)/*.cpp)
# 将所有的文件.cpp文件对应成.o文件
OBJS = $(addsuffix .o, $(basename $(wildcard $(FILES))))

# 目标依赖所有的.o文件
$(TARGET):$(OBJS)
	$(CC) -o $@ $^ $(LINKS)
# 将所有的.cpp文件编译成对应的.o文件
%.o:%.cpp
	$(CC) $(CFLAGS) -c $< -o $@
# make clean时,所有.o文件和目标文件
.PHONY : clean
clean:
	rm $(TARGET) $(OBJS)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值