菜鸟学linux-我的第一个makefile

it2025-12-31  2

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)

 

最新回复(0)