1.写在前面
最近弄Linux编程,自己写Makefile编译代码。产生了2个需求:1.一个Makefile编译链接多个.c或.cpp文件,生成多个可执行程序;2.一个Makefile编译链接多个.c或.cpp文件,只生成一个可执行程序。今天只说第1个需求。
2.Makefile
网上讲Makefile文章很多,我这就不耍大刀了。
直接来Makefiel代码:
CC = g++
C_FLAGS = -g -Wall
INCLUDE =
LIBS =
#wildcard对cpp文件进行展开
SRCS := $(wildcard *.cpp)
#将SRCS中后缀.cpp替换成空,即可执行程序的名字与cpp名字相同
TARGET := $(patsubst %.cpp, %, $(SRCS))
OBJDIR = .
.cpp:
$(CC) $(C_FLAGS) -o $@ $< $(INCLUDE) $(LIBS)
#可移动到指定的OBJDIR目录
#mv $@ $(OBJDIR)
all: $(TARGET) clean
clean:
rm -rf *.o
3.讲解
SRCS := $(wildcard *.cpp),表示获取当前目录下的cpp文件集,放在变量SRCS中
TARGET := $(patsubst %.cpp, %, $(SRCS)),表示将对应的cpp文件名转为无后缀文件后放在下面的OBJS变量中,可以自己定义可执行文件后缀
其中
$@ 表示目标文件
$^ 表示所有依赖项
$< 表示第一个文件