Makefile学习笔记

来源:互联网 发布:sportman足球分析软件 编辑:程序博客网 时间:2024/05/23 11:12

Makefile学习笔记

命令规则

目标:依赖文件列表    命令

注意:

1. 目标 可以是可执行文件,目标文件,或中间文件。2. 命令 起始字符必须为TAB字符。3. 注释 注释使用“#”。

常用变量

变量 描述 $@ 规则的目标文件名 $< 规则的第一个依赖文件名 $^ 规则的所有依赖文件列表

其他

命令前加@,此命令不打印到屏幕上,但命令依旧执行。模式规则 %.o:%.c <===> 后缀规则 .o.c:$(make) <===> make

常用内嵌函数

函数调用的格式

$(function arguments)

(1)模式匹配函数

$(wildcard PATTERN)例如:SOURCES = $(wildcard *.c)

(2)模式替换函数

$(patsubst PATTERN, REPLACEMENT,TEXT)例如:OBJS = $(patsubst %.c, %.o, $(SOURCES))等价于$(src:.c=.o)

(3)shell函数

获取当前目录下的所有子目录例如:SUBDIR = $(shell ls -d */)获取子目录中的.c文件例如:SUBSRC = $(shell find $(SUBDIR) -name '*.c')

Makfile模板

支持一级目录的Makfile

# makefile 模板# 作者:wenpeng_lu# 日期:2017/4/30# 适用场景:(1)多个源文件位于同一级文件夹#          (2)只生成一个可执行文件.PHONY: install cleanCC = gccLIB = -lpthreadCFLAGS = -Wall -gBIN = test# 可执行文件通常的安装目录为 /usr/sbinINSTALLDIR = ./# 模式匹配SOURCES = $(wildcard *.c)# 模式替换OBJS = $(patsubst %.c, %.o, $(SOURCES))# 终极目标$(BIN): $(OBJS)    $(CC) $(CFLAGS) $^ -o $@ $(LIB)# 模式规则%.o: %.c    $(CC) $(CFLAGS) -c $< -o $@# 可执行文件部署install:    cp $(BIN) $(INSTALLDIR)clean:    rm -rf $(BIN) $(OBJS)

支持二级目录的Makfile

# makefile 模板# 作者:wenpeng_lu# 日期:2017/4/30# 适用场景:(1)支持二级目录#          (2)在一级目录生成一个可执行文件.PHONY: install cleanCC = gccLIB = -lpthreadCFLAGS = -Wall -gBIN = test# 可执行文件通常的安装目录为 /usr/sbinINSTALLDIR = ./# 子文件夹SUBDIR = $(shell ls -d */)SUBSRC = $(shell find $(SUBDIR) -name '*.c')SUBOBJ = $(SUBSRC:%.c=%.o)# 根文件夹ROOTSRC = $(wildcard *.c)ROOTOBJ = $(ROOTSRC:%.c=%.o)# 终极目标$(BIN): $(ROOTOBJ) $(SUBOBJ)    $(CC) $(CFLAGS) $^ -o $@ $(LIB)%.o: %.c    $(CC) $(CFLAGS) -c $< -o $@install:    cp $(BIN) $(INSTALLDIR)clean:    rm -rf $(BIN) $(ROOTOBJ) $(SUBOBJ)

支持多个makefile的makefile

# 主控makefile# 作者:wenpeng_lu# 日期:2017/4/30# 适用场景:(1)多个源文件目录,且每个目录下生成一个可执行文件#          (2)本makefile调用SUBDIRS目录下的子makefileSUBDIRS = $(shell ls -d */)#SUBDIRS = test1 test2.PHONY:default all clean $(SUBDIRS)# make默认为生成alldefault:all# all,clean的生成规则相同# 其中,$(MAKE) 等价于 makeall clean:    $(MAKE) $(SUBDIRS) TARGET=$@$(SUBDIRS):    $(MAKE) -C $@ $(TARGET)
0 0
原创粉丝点击