1、VERSION 1
## VERSION 1
hello:main.cpp xxx.cpp
g++ -o hello main.cpp xxx.cpp
- hello:hello是要生成的目标
- 冒号后面是依赖的文件
- 下面一行是执行的命令,前面必须有一个tab的位置
makefile规则
- 如果要生成的目标文件不是最新的,即时间晚于依赖文件,则再次执行
- 否则的话不执行
2、VERSION 2
## VERSION 2
CXX = g++
TARGET = hello
OBJ = main.o xxx.o
$(TARGET): $(OBJ)
$(CXX) -O $(TARGET) $(OBJ)
main.o: main.cpp
$(CXX) -c main.cpp
xxx.o: xxx.cpp
$(CXX) -c xxx.cpp
3、VERSION 3
## VERSION 3
CXX = g++
TARGET = hello
OBJ = main.o xxx.o
CXXFLAGS = -c -Wall
$(TARGET): $(OBJ)
$(CXX) -O $@ $^
%.o: %.cpp
$(CXX) $(CXXFLAGS) $< -o $@
.PHONY: clean
clean:
rm -f *.o $(TARGET)
4、VERSION 4
CXX = g++
TARGET = hello
SRC = $(wildcard *.cpp) #添加变量SRC为所有的.cpp文件
OBJ = $(patsubst %.cpp, %.o, $(SRC))
#添加变量OBJ。搜寻SRC中文件后,若类型为.cpp或.o则统一替换成patsubst
#以上三行为添加变量,用变量代表对应文件
CXXFLAGS = -c -Wall #添加变量,-Wall是打印g++所提示的警告信息
$(TARGET): $(OBJ)
$(CXX) -o $@ $^ #命令:编译目标文件target和依赖文件obj。$@表示目标文件,$^表示所有的依赖文件
%.o: %.cpp #将.o和.cpp的同名文件相匹配
$(CXX) $(CXXFLAGS) $< -o $@ #将第一个依赖文件(产生带调试信息的可执行文件)生成目标文件
.PHONY: clean #清除命令
clean:
rm -f *.o $(TARGET) #删除所有.O和目标文件