CC = g++
CFLAGS = -std=c++11 -Wall -pthread
LDFLAGS =SRCS = ../main.cpp socketCan_FW_Download.cpp
OBJS = $(SRCS:.cpp=.o)acandev: $(OBJS)$(CC) $(CFLAGS) $(OBJS) -o acandev $(LDFLAGS)%.o: %.cpp$(CC) $(CFLAGS) -c $< -o $@clean:rm -f $(OBJS) acandev
解释下上面Makefile中各行的意义?
这是一个简单的 Makefile,用于构建一个名为 acandev 的可执行文件。下面解释每一行的作用:
-
CC = g++: 定义了一个变量CC,表示编译器。在这里,g++是 GNU C++ 编译器的命令。 -
CFLAGS = -std=c++11 -Wall -pthread: 定义了一个变量CFLAGS,表示编译选项。这里包含了-std=c++11(使用 C++11 标准)、-Wall(开启所有警告)、-pthread(启用多线程支持)等编译选项。 -
LDFLAGS =: 定义了一个变量LDFLAGS,表示链接选项。在这里为空,表示没有额外的链接选项。 -
SRCS = ../main.cpp socketCan_FW_Download.cpp: 定义了一个变量SRCS,表示源文件列表。这里包含了main.cpp和socketCan_FW_Download.cpp两个源文件。 -
OBJS = $(SRCS:.cpp=.o): 定义了一个变量OBJS,表示目标文件列表。通过将SRCS中的每个.cpp后缀替换为.o后缀,得到了目标文件列表。 -
acandev: $(OBJS): 定义了一个规则,说明如何构建目标文件acandev。它依赖于OBJS中列出的所有目标文件。当执行make acandev时,Make 将尝试生成acandev可执行文件。 -
$(CC) $(CFLAGS) $(OBJS) -o acandev $(LDFLAGS): 构建acandev的命令。这里使用了变量CC表示编译器,CFLAGS表示编译选项,OBJS表示目标文件列表,-o acandev表示输出文件名为acandev,LDFLAGS表示链接选项。 -
%.o: %.cpp: 定义了一个规则,说明如何从.cpp文件生成对应的目标文件。当执行make时,Make 将尝试根据这个规则来生成所有的目标文件。 -
$(CC) $(CFLAGS) -c $< -o $@: 构建目标文件的命令。这里使用了变量CC表示编译器,CFLAGS表示编译选项,-c表示生成目标文件,$<表示规则中的第一个依赖(源文件),-o $@表示输出文件名为目标文件名。 -
clean: rm -f $(OBJS) acandev: 定义了一个clean规则,用于清理生成的目标文件和可执行文件。当执行make clean时,Make 将删除所有的目标文件和acandev可执行文件。
这个 Makefile 主要用于构建 C++ 项目,它定义了编译器选项、源文件列表、目标文件列表,并提供了构建和清理的规则。