Makefile 是批量处理编译文件的工具,主要应用在编译大型项目时,需要同时调用多个文件时的操作。
具体用法有以下几种
##Version 1
hello: main.cpp printhello.cpp factorial.cpp // hello 指要输出的文件, main.cpp 需要用的文件函数名
g++ -o hello main.cpp printhello.cpp factorial.cpp
##Version 2
CXX = g++
TARGET = hello
OBJ = main.o printhello.o factorial.o
$(TARGET): $(OBJ) // target 依赖于 OBJ生成的
$(CXX) -o $(TARGET) $(OBJ) // 采用 CXX -o 方法 target 依赖于 OBJ生成的
main.o: main.cpp // main.o 怎么来的 下面同理
$(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
CXXFLAGS = -c -Wall
$(TARGET): $(OBJ)
$(CXX) -o $@ %^ // $@ = TARGET %^ = 依赖OBJ
%.o:%.cpp: //cpp文件生成.o 文件如下操作
$(CXX) $(CXXFLAGS) $< -o $@
.PHONY:clearn //防止文件中有clean 文件 无法执行下面的程序,因此加上此代码出现奇异
clean:
rm -f *.o $(TARGET) 删除所有的.o文件 和 TARGET 文件
#Version 4
CXX = g++
TARGET = hello
SRC = $(wildcard *.cpp) //当前目录下的cpp 都放在SRC这个变量里
OBJ = $(patsubst %.cpp, %.o, $(SRC)) // 将SRC中的变量都替换成.o文件
CXXFLAGS = -c -Wall
$(TARGET): $(OBJ)
$(CXX) -o $@ %^ // $@ = TARGET %^ = 依赖OBJ
%.o:%.cpp: //cpp文件生成.o 文件如下操作
$(CXX) $(CXXFLAGS) $< -o $@
.PHONY:clearn //防止文件中有clean 文件 无法执行下面的程序,因此加上此代码出现奇异
clean:
rm -f *.o $(TARGET) 删除所有的.o文件 和 TARGET 文件