linux makefile详解?
2016-02-22 20:49
411 查看
下边的代码改了好几遍的了,基础的部分就不说了,重点记几点:$@是目标文件,$^是依赖的所有目标,$<是依赖的第一个。
这里重点测了一下依赖第一个的命令$<
如果你要把三个源文件.c编译成三个目标文件.o,再编译成最终的可运行文件。
这个$<是不能乱用的,必须配合“.c.o:”规则,这个规则是指所有.c依赖对应名称的.o,只有它才能配合$<完成完整编译(假设打包了,就算一个),不然的话真的是只编译规则依赖的第一个文件。
SRC = main.c func1.c func2.c
OBJ = $(patsubst %.c,%.o,$(SRC))
等价与
OBJ = main.o func1.o func2.o
HEADER同理,换成.h
patsubst是是替换用的,这是makefile里的函数,用法和C里的函数不太一样,$相当于返回值,()内部是函数名和参数名。
make创建的命令是大小写敏感并且完全自定义的,有些之所以用起来一样,是因为约定成俗,比如
#make clean
而本例真想删除目标文件和.o文件的话,要用
#make CLEAN
才行。
PS:勤删除.o文件,不然会干扰对Makefile的测试。
这里重点测了一下依赖第一个的命令$<
如果你要把三个源文件.c编译成三个目标文件.o,再编译成最终的可运行文件。
这个$<是不能乱用的,必须配合“.c.o:”规则,这个规则是指所有.c依赖对应名称的.o,只有它才能配合$<完成完整编译(假设打包了,就算一个),不然的话真的是只编译规则依赖的第一个文件。
TARGET = main SRC = main.c func1.c func2.c #SRC = func1.c func2.c main.c OBJ = $(patsubst %.c,%.o,$(SRC)) HEADER = $(patsubst %.c,%.h,$(SRC)) CC = gcc #$(TARGET) : $(OBJ) # $(CC) $(OBJ) -o $(TARGET) #$(OBJ) : $(SRC) # $(CC) -c func1.h func2.h $*.cpp -o $@ #all : $(TARGET) $(TARGET) : $(OBJ) $(CC) -o $@ $^ #$(OBJ) : $(SRC) $(HEADER) .c.o: # $(CC) -c main.c # $(CC) -c $< #func1.o func2.o main.o: func1.c func2.c main.c gcc -c $< CLEAN: rm *.o rm $(TARGET)
SRC = main.c func1.c func2.c
OBJ = $(patsubst %.c,%.o,$(SRC))
等价与
OBJ = main.o func1.o func2.o
HEADER同理,换成.h
patsubst是是替换用的,这是makefile里的函数,用法和C里的函数不太一样,$相当于返回值,()内部是函数名和参数名。
make创建的命令是大小写敏感并且完全自定义的,有些之所以用起来一样,是因为约定成俗,比如
#make clean
而本例真想删除目标文件和.o文件的话,要用
#make CLEAN
才行。
PS:勤删除.o文件,不然会干扰对Makefile的测试。
相关文章推荐
- 在Linux飞控环境下使用MAVLink教程
- linux Native AIO的使用
- 第2章 Linux如何学习
- linux环境变量PS1设置完整版附带颜色
- arm-linux-gcc工具链安装FreeTpye 编译的支持
- 《Linux操作系统编译构建指南》
- QT5-控件-QLineEdit-文本输入控件,用来输入密码什么的还不错,可以和Linux登录一样不移动光标哦
- Linux下的消息队列示例
- 使用synergy软件使两台电脑共用一个鼠标和键盘
- 查看网卡流量
- Centos 执行top命令详细解读
- Linux Grep命令详解
- Linux IO 同步/异步 阻塞/非阻塞
- Linux下查看某个软件安装路径
- linux文件命令
- centos 7 安装在vmware Workstation的网卡问题 RHEL7
- 第1章 Linux是什么
- linux mysql修改最大连接数
- #查看Linux的版本信息
- wdcp centos6.5多网站部署