make学习,参考「Makefile 20分钟入门,简简单单,展示如何使用Makefile管理和编译C++代码」
程序见:https://github.com/ShiqiYu/CPP/tree/main/week03/examples/lab
#「只编译不链接」编译.cpp文件,得到.o文件
g++ -c *.cpp
#链接,将.o文件链接到一起,得到可执行文件
g++ *.o file
# 显示编译时的warning
g++ -c -Wall *.cpp
## VERSION 1
hello: main.cpp printhello.cpp factorial.cpp
g++ -o hello main.cpp printhello.cpp factorial.cpp
## VERSION 2
# 变量定义
CXX = g++
TARGET = hello
OBJ = main.o printhello.o factorial.o
# 「链接」.o文件
$(TARGET): $(OBJ)
$(CXX) -o $(TARGET) $(OBJ)
# 「编译」生成.o
main.o: main.cpp
$(CXX) -c main.cpp
printhello.o: printhello.cpp
$(CXX) -c printhello.cpp
factorial.o: factorial.cpp
$(CXX) -c factorial.cpp
## VERSION 3
# 变量定义
CXX = g++
TARGET = hello
OBJ = main.o printhello.o factorial.o
# 编译时显示warning
CXXFLAGS = -c -Wall
$(TARGET): $(OBJ)
$(CXX) -o $@ $^
%.o: %.cpp
$(CXX) $(CXXFLAGS) $< -o $@
.PHONY: clean
clean:
rm -f *.o $(TARGET)
$@
)表示($(TARGET)
)$^
)表示($(TARGET)
)的所有依赖,即($(OBJ)
)$<
)表示($(TARGET)
)的第一个依赖,即(%.cpp
)## VERSION 4
CXX = g++
TARGET = hello
SRC = $(wildcard *.cpp)
OBJ = $(patsubst %.cpp, %.o, $(SRC))
CXXFLAGS = -c -Wall
$(TARGET): $(OBJ)
$(CXX) -o $@ $^
%.o: %.cpp
$(CXX) $(CXXFLAGS) $< -o $@
.PHONY: clean
clean:
rm -f *.o $(TARGET)
$(wildcard PATTERN...)
,在Makefile中,它被展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表$(wildcard *.cpp)
表示获取工作目录下的所有.cpp文件列表$(patsubst %.c,%.o,$(wildcard *.c))
,表示替换1、http://www.freecplus.net/b7a1c199959f4349b2a98874864a2000.html