在Linux下开发,使用Makefile组织源码工程师基本功。在本篇文章中会介绍Makefile的基础知识以及Dock经常使用的Makefile函数及模板。
Makefile.jpg
1.基本概念
每一个Makefile选项都是由 Target
、Prerequisite
、Function
三部分组成,如:
target: prerequisites
command
一个实例如下:
hello: hello.c
gcc hello.c -o hello
这样在我们使用 make hello
的时候,就会调用 gcc hello.c -o hello
命令。
2.常用函数
通配函数,下面这个会通配所有以 .cpp
结尾的文件。如当前文件夹下有a.cpp b.c c.cpp,那么 SRC_CPP的值就会是 a.cpp c.cpp
SRC_CPP = $(wildcard *.cpp)
替换函数。我们在实际开发中常用到的一点就是讲.cpp .c转换为.o文件,但是总不能一个一个去敲吧。那么替换函数就派上用场了。
OBJS += $(patsubst %c, %o, $(SRC_C))
上面这条就是把 $SRC_C中每一项的c
换为 o
。
3.Makefile模板
#CXX = g++
#CC = gcc
CXX = arm-linux-gnu-g++
CC = arm-linux-gnu-gcc
CXXFLAGS = -pthread -Wall -std=c++11
INCLUDE_PATH = -I./inc
SRC_CPP = $(wildcard *.cpp)
SRC_C += $(wildcard ./*.c)
OBJS += $(patsubst %c, %o, $(SRC_C))
OBJS += $(patsubst %cpp, %o, $(SRC_CPP))
TARGET=Hello #自定义自己的目标文件
$(TARGET):$(OBJS)
$(CXX) $^ $(CXXFLAGS) -o $@ -L./ -lsxtl
.cpp.o: #cpp 编译成 o
$(CXX) -c $(CXXFLAGS) $(INCLUDE_PATH) $< -o $@
.c.o: # c 编译成 o
$(CXX) -c $(CXXFLAGS) $(INCLUDE_PATH) $< -o $@
clean:
rm $(OBJS)
rm $(TARGET)
每次Dock需要重新配置一个Makefile的时候就会将上边这个Makefile修改一下,适配新工程。