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
- Makefile学习笔记
- makefile学习笔记
- makefile学习笔记(1)
- Makefile学习笔记
- MakeFile学习笔记一
- makefile学习笔记
- makefile学习笔记
- Makefile的学习笔记
- makefile学习笔记
- Makefile学习笔记
- Makefile学习笔记
- Makefile学习笔记
- makefile学习笔记
- Makefile学习笔记
- makefile学习笔记
- Makefile的学习笔记
- Makefile学习笔记
- makefile学习笔记
- hdu 2222 Keywords Search
- java学习笔记--异常
- bzoj1452: [JSOI2009]Count
- DP——Best Time to Buy and Sell Stock
- 2017Google Codejam round1c Problem B. Parenting Partnering
- Makefile学习笔记
- Android fragment 与Activity 互相传值。
- BZOJ 2460 [贪心][线性基]
- C语言学生信息管理系统(动态链表版)
- Retrofit实战(一)一个简单的示例
- 写篇英语总结
- URAL 2020. Traffic Jam in Flower Town
- 大型分布式网站的分布式缓存
- 数据结构与算法(13)——队列