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++ 项目,它定义了编译器选项、源文件列表、目标文件列表,并提供了构建和清理的规则。