目标文件:依赖
命令
例:
main.exe:hello.cc
g++ hello.cc -o main.exe
#g++ *.cc -o main.exe #编译所有.cc文件
删除文件
clean:
rm -rf main.exe
.o文件可以自动依赖于.cc文件
如果有两个makefile文件我们可以通过以下命令来选择执行哪个makefile文件。
make -f makefile2
make只会执行第一个,想要所有语句都执行可以使用all
all:hello.exe hi.exe
hello.exe:hello.o
g++ -o $@ $^ #&@代表:左边所有内容 $^代表:右边所有内容
hi.exe:hi.o
g++ -o $@ $^
简化makefile
CC:=g++
#LIBS:= -llog4cpp -lpthread
#OBJS:= hello.o
all:hello.exe hi.exe
hello.exe:hello.o
$(CC) -o $@ $^ #&@代表:左边所有内容 $^代表:右边所有内容
hi.exe:hi.o
&(CC) -o $@ $^
打印
SRC_DIR:=./
SRCS:= $(wildcard $(SRC_DIR)*.cc)
print:
@echo &(SRCS)
示例
INC_DIR:= ./include/
SRC_DIR:= ./src/
SRCS:= $(wildcard $(SRC_DIR)*.cc) #使用wildcard函数可以使用通配符,找到所有满足通配符的文件名
CC:= g++
CXXFLAGS:= -g -Wall $(addprefix -I, $(INC_DIR)) #addprefix添加前缀 -I指定头文件目录
LIBS:= -llog4cpp -lpthread
OBJS:= $(patsubst %.cc, %.o, $(SRCS)) #将后缀.cc替换为.o
BIN_EXE:= ./bin/test.exe
$(BIN_EXE):$(OBJS)
$(CC) -o $@ $^ $(CXXFLAGS) $(LIBS)
%.o:%.cc
$(CC) -o $@ -c $< $(CXXFLAGS) $(LIBS)
print:
@echo $(OBJS)
clean:
rm -rf $(OBJS) $(BIN_EXE)