一常用函数
1wildcard
SOURCES= $(wildcard *.c)
这行会产生一个所有以 '.c'结尾的文件的列表,然后存入变量 SOURCES里
2patsubst
OBJS =$(patsubst %.c,%.o,$(SOURCES)).................(1)
三个参数,第一个参数是patsubst+匹配格式,第二个参数是目标转换成的匹配格式,第三个参数是源字符串
OBJS =$(FILES:%.c=%.o) 作用与命令(1)相同
3addprefix
$(addprefix <prefix>,<names...>)
把前缀<prefix>加到<names>中的每个单词后面,返回加过前缀的文件序列
4notdir
notdir把展开的文件的路径去掉,只显示文件名而不包含其路径信息
FILES =$(notdir $(SOURCES))
这行的作用是把上面以'.c'结尾的文件的文件列表中附带的路径去掉,只显示符合条件的文件名。
5filter
函数$(filter,<pattern…>,text)
保留text中符合<pattern>中的字符串
6firstword
函数$(firstword<text>),功能取回<text>中第一个单词
二自动变量
自动变量 | 含义 |
$@ | 目标集合 |
$% | 当目标是函数库文件时,表示其中的目标文件名 |
$< | 第一个依赖目标。如果依赖目标是多个,挨个表示依赖目标 |
$? | 比目标新的依赖目标的集合 |
$^ | 所有依赖目标的集合,去除重复的依赖目标 |
$+ | 所有依赖目标的集合,不去除重复的依赖的目标 |
$* | 这个是GNU make特有的,其他的make不一定支持 |
三常用的变量名
四制定Makefile
make -f test.mk
五自己写的Makefile模板
CXX=g++
CC=gcc
BIN_DIR=bin
SRC_DIR=src
INCLUDE_DIR=-I./include -I./include1
SOURCES=$(wildcard $(SRC_DIR)/*.cpp)
OBJECTS=$(patsubst %.cpp, %.o, $(SOURCES))
INCLUDE=$(wildcard $(INCLUDE_DIR)/*)
CXXFLAGS=
LDFLAG=
BIN=$(BIN_DIR)/aaa
.PHONY=all clean
all:$(BIN)
$(BIN):$(OBJECTS)
@echo "aa"
$(CXX) -o $@ $^
%.o:%.cpp
@echo "bb"
$(CXX) $(INCLUDE_DIR) -c $(CXXFLAGS) -o $@ $^ $(LDFLAG)
clean:
rm -rf $(BIN) $(OBJECTS)