makefile学习笔记
来源:互联网 发布:游戏数据异常 编辑:程序博客网 时间:2024/05/16 08:38
学习makefile笔记
一个我个人觉得非常实用的例子:
eg:在当前目录下有a.cpp and b.cpp 现在写一个makefile,将这些文件编译出对应的.o文件。
begin:
1 2 src=$(wildcard *.c) 3 dir=$(notdir $(src)) 4 obj=$(patsubst %.c,%.o,$(dir) ) 5 6 all: $(obj) 7 @echo src:$(src) 8 @echo dir:$(dir) 9 @echo obj:$(obj) 10 @echo "end" 11 $(obj): %.o: %.c 12 gcc -c $(CFLAGS) $< -o $@ 13 clean: 14 -@rm -rf *.o
输出结果为:
gcc -c char.c -o char.o
gcc -c test_sizeof.c -o test_sizeof.o
gcc -c transfer.c -o transfer.o
src:char.c test_sizeof.c transfer.c
dir:char.c test_sizeof.c transfer.c
obj: char.o test_sizeof.o transfer.o
end
#wildcard把 指定目录下的所有后缀是c的文件全部展开
a.cpp b.cpp
#notdir把展开的文件去除掉路径信息
a.cpp b.cpp
#patsubst把$(dir)中的变量符合后缀是.c的全部替换成.o
#CFLAGS: 指定头文件(.h文件)的路径,如:CFLAGS=-I/usr/include -I/path/include。同样地,安装一个包时会在安装路径下建立一个include目录,当安装过程中出现问题时,试着把以前安装的包的include目录加入到该变量中来。
a.cpp b.cpp
#notdir把展开的文件去除掉路径信息
a.cpp b.cpp
#patsubst把$(dir)中的变量符合后缀是.c的全部替换成.o
#CFLAGS: 指定头文件(.h文件)的路径,如:CFLAGS=-I/usr/include -I/path/include。同样地,安装一个包时会在安装路径下建立一个include目录,当安装过程中出现问题时,试着把以前安装的包的include目录加入到该变量中来。
#在每条命令前加上@符号,可以隐藏makefile打印出当前命令本身
#在命令前加上一个“-”号的意思是,忽略该条命令的错误,继续执行。等同于-i i是--ignore-errors的缩写。
今天学习了makefile中的“命令包”好“目标变量”
命令包:
eg:
1 src=$(wildcard *.c) 2 dir=$(notdir $(src)) 3 obj=$(patsubst %.c,%.o,$(dir) ) 4 5 define two_line 6 echo "this is two_line:one" 7 echo "this is two_line:two" 8 endef 9 10 all: $(obj) 11 @echo $(src) 12 @echo $(dir) 13 @echo $(obj) 14 @echo "end" 15 @$(two_line) 16 17 $(obj): %.o: %.c 18 gcc -c $(CFLAGS) $< -o $@ 19 clean: 20 rm -rf *.o
其中5~8行定义了这个命令包,two_line是这个命令包的名字,在define和endef之间的命令就是这个命令包的内容,在第15行调用了这个命令包。结果和想象的一样,不用过多解释。
目标变量:
这个特性很有用,我们设置了一个变量,这个变量只在特定的目标中起作用。
eg:
1 src=$(wildcard *.c) 2 dir=$(notdir $(src)) 3 obj=$(patsubst %.c,%.o,$(dir) ) 4 5 define two_line 6 echo "this is two_line:one" 7 echo "this is two_line:two" 8 endef 9 10 all: cc = gcc 11 12 all: $(obj) 13 @echo $(src) 14 @echo $(dir) 15 @echo $(obj) 16 @echo "end" 17 @$(two_line) 18 19 $(obj): %.o: %.c 20 $(cc) -c $(CFLAGS) $< -o $@ 21 clean: 22 rm -rf *.o 23 24
第十行中,我们在all这个目标中定义 cc=gcc,只在这个目标规则下,$(cc) = gcc 0 0
- Makefile学习笔记
- makefile学习笔记
- makefile学习笔记(1)
- Makefile学习笔记
- MakeFile学习笔记一
- makefile学习笔记
- makefile学习笔记
- Makefile的学习笔记
- makefile学习笔记
- Makefile学习笔记
- Makefile学习笔记
- Makefile学习笔记
- makefile学习笔记
- Makefile学习笔记
- makefile学习笔记
- Makefile的学习笔记
- Makefile学习笔记
- makefile学习笔记
- 利用GetPrivateProfileString读取配置文件(.ini)
- 电商特卖网站俏物悄语破产清算
- jQuery获取Radio选择的Value值:
- 代理模式VS适配器模式
- IT牛人博客
- makefile学习笔记
- ActivityThread运行框架
- Eclipse安装MAT插件
- 模板方法模式
- sql 取 指定范围内的两位小数
- Handler, Message, MessageQueue, Looper —— 吸血鬼和狼人之战的情报网络
- Python 学习笔记 -2
- 将Excel数据导入MySql
- 请解释SQL是何种类型的语言?