北京网站开发建设公司,网站描述多个词怎么分隔,医疗网站怎么做优化,php程序员网站开发招聘什么是Makefile文件
一个工程#xff0c;源文件不计其数#xff0c;按照类型、功能、模块分别放在对应的若干个目录中Makefile定义了一系列的规则#xff0c;比如定义文件编译的先后顺序。类似shell脚本#xff0c;也可以执行操作系统的命令Makefile带来的好处是自动化编译…什么是Makefile文件
一个工程源文件不计其数按照类型、功能、模块分别放在对应的若干个目录中Makefile定义了一系列的规则比如定义文件编译的先后顺序。类似shell脚本也可以执行操作系统的命令Makefile带来的好处是自动化编译文件的命名 makefile 或者 MakefileMakefile规则 其可以定义一个或者多个 规则目标 ... : 依赖 ... 命令 shell 命令目标最终要生成的文件 伪目标除外依赖生成目标所需要的文件或者是目标命令通过执行命令对依赖生成目标 命令之前使用 Tab进行缩进
工作原理
命令在执行之前需要检查规则中依赖是否存在 如果存在执行命令如果不存在向下检查其他的规则检查有没有一个规则是用来生成这个依赖的如果找到就执行规则中的命令检测更新在执行规则中的命令时会比较目标和依赖文件的时间 如果依赖的时间比目标时间晚需要重新生成目标如果依赖的时间比目标时间早目标不需要更新对应规则中的命令不需要被执行
app:sub.o add.o mult.o main.ogcc sub.o add.o mult.o main.osub.o:sub.cgcc -c sub.c -o sub.oadd.o:add.cgcc -c add.c -o add.omult.o:mult.cgcc -c mult.c -o mult.omain.o:main.cgcc -c main.c -o main.o 内容详解
自定义变量 变量名 变量值 var hello预定义变量 AR 归档维护程序的名称 默认数值为 arCCC 编译器的名称 默认数值为ccCXXC编译器的名称 默认数值为g$目标的完整路径$ 第一个依赖的文件的名称$^ 所有的依赖文件的获取变量的数值 $(变量名字)
app:mian.c a.c b.cgcc -c main.c a.c b.capp:main.c a.c b.c$(CC) -c $^ -o $
模式匹配
app:sub.o add.o mult.o main.ogcc sub.o add.o mult.o main.osub.o:sub.cgcc -c sub.c -o sub.oadd.o:add.cgcc -c add.c -o add.omult.o:mult.cgcc -c mult.c -o mult.omain.o:main.cgcc -c main.c -o main.o模式匹配%.o:%.c% 通配符匹配一个字符串
%.o:%.cgcc -c $ -o $
函数
(wildcard PATTERN)
功能获取指定目录下指定类型的文件列表参数PATTERN 指的是某个或者多个目录下的对应的某种类型的文件如果有多个目录一般使用空格进行间隔返回得到的若干个文件的文件列表 文件名字之间使用空格进行间隔
例子
$(wildcard *.c ./sub/*.c)返回数值的格式a.c b.c d.c e.c f.c
$(patsubst pattern,replacement,text) 功能查找text中的单词单词以“空格”、“Tab”或者回车、换行分隔是否符合模式pattern如果匹配的话则用replacement替代pattern 可以包括通配符% 表示任意长度的子串。如果replacement中 也包含“%s”,那么replacement中的这个%,将是pattern中的%所代表的子串使用\进行转义 即 \%表示真实含义的%字符
例子
$(patsubst %.c , %.o , x.c bar.c)返回数值的类型 x.o bar.o
删除 所有的.o 文件 使用命令 make clean 手动清除文件
.PHONY:clean //将clean作为伪目标就不会生成clean文件
clean:rm $(objs) -f
CMakeLists.txt文件的参考链接
CMakeLists模板持续更新中欢迎补充CMakeLists.txt编写常用命令CMake 语法 - 详解 CMakeLists.txtCMakeLists.txt 语法介绍与实例演练【CMake】CMakeLists.txt的超傻瓜手把手教程附实例源码Cmake知识----编写CMakeLists.txt文件编译C/C程序