做网站盈利方式,泉州公司网站模板建站,数字营销成功案例,广西商城网站建设makefile make命令主要功能使用方法常用选项 makefile文件基本结构使用案例变量定义内置变量(即系统定义的确定变量)伪目标模式规则条件语句注释makefile中的常用函数 进度条小程序创建文件编辑.h文件编辑.c文件创建main函数makefile文件执行效果 make命令
在linux中#xff… makefile make命令主要功能使用方法常用选项 makefile文件基本结构使用案例变量定义内置变量(即系统定义的确定变量)伪目标模式规则条件语句注释makefile中的常用函数 进度条小程序创建文件编辑.h文件编辑.c文件创建main函数makefile文件执行效果 make命令
在linux中make 是一个自动化构建工具主要用于管理和控制项目的编译过程。它通过读取 Makefilemakefile 文件中的规则和指令自动执行所需的命令以便构建可执行程序、库或其他文件。
主要功能
自动化构建通过简单的命令如 makemake 可以根据 Makefile 中的定义自动完成编译和链接过程。
处理依赖关系make 会检查文件之间的依赖关系只重新编译那些已更改的源文件节省时间和资源。
多平台支持make 是一种标准工具可以在不同的 Unix-like 系统上使用。
使用方法
基本的 make 命令格式如下
make [target]target要构建的目标。如果不指定目标make 默认构建第一个目标。
常用选项
-f FILE指定使用的 Makefile 文件默认是 Makefile 或 makefile。 -j N并行构建N 是并行执行的任务数量。 -k即使某个目标构建失败也继续构建其他目标。 -n显示将要执行的命令但不实际执行。 -B强制所有目标重新构建。
makefile文件
在 Makefile 中语法结构相对简单主要包括目标、依赖关系和命令。以下是一些基本语法元素
基本结构
Makefile 的基本结构由规则、目标、依赖和命令组成
target: dependenciescommandtarget要生成的文件或目标可以是可执行文件、对象文件等。 dependencies生成目标所依赖的文件列表。 command用于生成目标的命令必须TAB 开头。
使用案例
# 一个简单的示例 MakefileCC gcc # 指定编译器
CFLAGS -Wall -g # 编译选项# 定义目标
all: myprogram# 规则
myprogram: main.o utils.o$(CC) $(CFLAGS) -o myprogram main.o utils.o# 依赖规则
main.o: main.c$(CC) $(CFLAGS) -c main.cutils.o: utils.c$(CC) $(CFLAGS) -c utils.c# 清理命令
clean:rm -f myprogram *.o变量定义
变量可以使用 或 : 定义
VAR value # 延迟赋值
VAR : value # 立即赋值变量在命令中可以用 $(VAR) 访问
$(CC) $(CFLAGS) -o myprogram main.o utils.o内置变量(即系统定义的确定变量)
$目标文件的名称。
$第一个依赖文件的名称。
$^所有依赖文件的名称。伪目标
伪目标在 Makefile 中是一种特殊的目标通常用于执行一些不会生成实际文件的命令如清理、安装等。伪目标不依赖于文件的存在或更新它们的存在主要是为了便于管理和执行特定的操作。
1. 伪目标的定义伪目标通常使用 .PHONY 关键字进行声明尽管在现代的 Make 工具中即使不使用 .PHONY伪目标仍然可以正常工作但为了确保无论目标文件是否存在命令都能被执行建议声明它们为伪目标。
.PHONY: clean install2. 用法示例2.1 清理目标 清理目标是最常见的伪目标之一用于删除生成的文件如可执行文件和中间文件
.PHONY: cleanclean:rm -f myprogram *.o在这个示例中运行 make clean 将会执行 rm -f myprogram *.o 命令清除生成的文件。
2.2 安装目标 安装目标通常用于将编译好的文件复制到系统的某个目录
.PHONY: installinstall:cp myprogram /usr/local/bin/运行 make install 将把可执行文件复制到 /usr/local/bin/ 目录。
2.3 其他常用伪目标 all通常是默认目标表示构建所有需要的目标。 test用于运行测试。
.PHONY: all testall: myprogramtest:./run_tests.sh3. 伪目标的优点独立于文件伪目标不依赖于文件的存在因此即使与目标同名的文件存在也不会影响命令的执行。
提高可读性伪目标使得 Makefile 更加清晰便于维护和理解。
灵活性可以根据需要定义任意数量的伪目标以实现不同的功能。
4. 注意事项尽管使用伪目标非常方便但要注意确保每个伪目标的命令是无状态的也就是说每次执行该命令都应该产生相同的结果。 在定义伪目标时应避免与实际文件名冲突虽然不会影响功能但可能会造成混淆。
模式规则
模式规则是 Makefile 中的一种强大特性允许用户定义一组规则用于处理一类文件的生成。这种规则通过模式匹配来简化和自动化构建过程尤其是在处理大量文件时非常有效。
1. 什么是模式规则模式规则的基本形式是
pattern: prerequisitesrecipe其中pattern 是一个带有通配符的模式可以使用 % 来匹配任何字符串。
2. 模式规则的语法% 可以代表零个或多个字符。 模式规则的目标可以是多种类型的文件。 通常用于生成目标文件例如从源文件生成对象文件。
3. 例子3.1 基本示例 假设我们有多个 C 源文件想要编译成相应的对象文件可以使用如下模式规则
%.o: %.cgcc -c $ -o $%.o 是目标模式表示任意以 .o 结尾的文件。 %.c 是先决条件模式表示任意以 .c 结尾的文件。 $ 是第一个先决条件表示与目标匹配的源文件。 $ 是当前目标的名字。 当你运行 make 并且有 file1.c 和 file2.c 时Make 会自动生成 file1.o 和 file2.o。
3.2 多文件规则 可以使用模式规则一次性处理多个文件
OBJ file1.o file2.o file3.oall: $(OBJ)%.o: %.cgcc -c $ -o $在这个例子中make all 会依次处理 file1.c、file2.c 和 file3.c生成对应的对象文件。
4. 复合模式规则可以在同一规则中定义多个目标。例如
program: main.o utils.ogcc $^ -o program%.o: %.cgcc -c $ -o $这里program 依赖于 main.o 和 utils.o而 %.o: %.c 模式规则则用于生成这些对象文件。
条件语句
Makefile 支持条件语句可以根据不同条件选择执行的命令
1. ifeqifeq 用于判断两个字符串是否相等。
ifeq (条件1, 条件2)# 如果条件1 和 条件2 相等执行的命令
endif示例
VAR valueifeq ($(VAR), value)MESSAGE VAR is value
elseMESSAGE VAR is not value
endif2.ifneqifneq 用于判断两个字符串是否不相等。
ifneq (条件1, 条件2)# 如果条件1 和 条件2 不相等执行的命令
endif示例
VAR valueifneq ($(VAR), other_value)MESSAGE VAR is not other_value
endif3. ifdefifdef 用于判断一个变量是否已定义。
ifdef VAR# 如果 VAR 已定义执行的命令
endif示例
ifdef VARMESSAGE VAR is defined
elseMESSAGE VAR is not defined
endif4. ifndefifndef 用于判断一个变量是否未定义。
ifndef VAR# 如果 VAR 未定义执行的命令
endif示例
ifndef VARMESSAGE VAR is not defined
endif注释
注释以 # 开头make 会忽略这一行的内容
# 这是一个注释makefile中的常用函数
常用的函数可以帮助处理变量、文件和字符串等。下面是一些常见函数的语法和用法
1. wildcard语法: $(wildcard pattern…)
用途: 返回匹配模式的所有文件名。
示例:
SRCS $(wildcard *.c)这将把当前目录下所有的 .c 文件名存入 SRCS 变量中。
2. patsubst语法: $(patsubst pattern, replacement, text)
用途: 将 text 中所有匹配 pattern 的部分替换为 replacement。
示例:
OBJS $(patsubst %.c, %.o, $(SRCS))这将把 SRCS 中的 .c 文件名转换为 .o 文件名。
3. subst语法: $(subst find, replace, text)
用途: 在 text 中替换所有 find 字符串为 replace 字符串。
示例:
NEW_VAR $(subst foo, bar, foo_baz)NEW_VAR 的值将是 bar_baz。
4. filter语法: $(filter pattern…, text)
用途: 从 text 中筛选出与 pattern 匹配的单词。
示例:
SRC_FILES file1.c file2.c file3.h
C_FILES $(filter %.c, $(SRC_FILES))C_FILES 将只包含 file1.c 和 file2.c。
5. filter-out语法: $(filter-out pattern…, text)
用途: 从 text 中排除与 pattern 匹配的单词。
示例:
SRC_FILES file1.c file2.c file3.h
C_FILES $(filter-out %.h, $(SRC_FILES))C_FILES 将只包含 file1.c 和 file2.c。
6. sort语法: $(sort list)
用途: 对 list 中的单词进行排序并去重。
示例:
FILES b.c a.c c.c a.c
SORTED_FILES $(sort $(FILES))SORTED_FILES 将是 a.c b.c c.c。
7. join语法: $(join list1, list2)
用途: 将两个列表合并为一个列表按空格分隔。
示例:
A a1 a2
B b1 b2
C $(join $(A), $(B))C 将是 a1 b1 a2 b2。
8. shell语法: $(shell command)
用途: 执行 shell 命令并返回其输出。
示例:
CURRENT_DIR $(shell pwd)CURRENT_DIR 将是当前工作目录的路径。
9. addprefix语法: $(addprefix prefix, names…)
用途: 在 names 的每个元素前添加 prefix。
示例:
OBJS $(addprefix obj/, $(SRCS))如果 SRCS 是 file1.c file2.c那么 OBJS 将是 obj/file1.c obj/file2.c。
10. addsuffix语法: $(addsuffix suffix, names…)
用途: 在 names 的每个元素后添加 suffix。
示例:
FILES $(addsuffix .bak, $(SRCS))这将把每个源文件名后加上 .bak 后缀。
进度条小程序
创建文件
使用touch创建各种文件 编辑.h文件
写出两个版本的进度条的进度条函数v1版本是单纯的进度条函数用来测试进度条逻辑v2版本则用来实际使用all为总进度now为当前进度以此判断进度条的位置。 编辑.c文件
1创建bar进度条用代表进度长度为101包含\0 2创建进度百分比显示到了什么程度 3创建进度圈圈以str中的字符不断变化代表函数在执行有时进度太慢进度条不动实际是在执行的 4\r代表从头打印 5fflush函数刷新缓冲区打印进度条 6usleep函数休眠控制速度 创建main函数
1all代表总进度 2speed代表网速 3now代表现在下载量 makefile文件
代表隐藏命令但是命令会执行
1第一条代表将.o文件链接成可执行文件 2第二条代表将.c文件都生成.o文件 3第三条clean清理生成的文件 4test展示生成的文件
执行效果 文章转载自: http://www.morning.hnkkf.cn.gov.cn.hnkkf.cn http://www.morning.sqnxk.cn.gov.cn.sqnxk.cn http://www.morning.rwcw.cn.gov.cn.rwcw.cn http://www.morning.nrydm.cn.gov.cn.nrydm.cn http://www.morning.mgnrc.cn.gov.cn.mgnrc.cn http://www.morning.qnxzx.cn.gov.cn.qnxzx.cn http://www.morning.hbywj.cn.gov.cn.hbywj.cn http://www.morning.nkjpl.cn.gov.cn.nkjpl.cn http://www.morning.sfhjx.cn.gov.cn.sfhjx.cn http://www.morning.ndlww.cn.gov.cn.ndlww.cn http://www.morning.mwzt.cn.gov.cn.mwzt.cn http://www.morning.wjplr.cn.gov.cn.wjplr.cn http://www.morning.ckdgj.cn.gov.cn.ckdgj.cn http://www.morning.nlhcb.cn.gov.cn.nlhcb.cn http://www.morning.qjlnh.cn.gov.cn.qjlnh.cn http://www.morning.rrxgx.cn.gov.cn.rrxgx.cn http://www.morning.guanszz.com.gov.cn.guanszz.com http://www.morning.qxlxs.cn.gov.cn.qxlxs.cn http://www.morning.gpmrj.cn.gov.cn.gpmrj.cn http://www.morning.wzknt.cn.gov.cn.wzknt.cn http://www.morning.wtdyq.cn.gov.cn.wtdyq.cn http://www.morning.lhhdy.cn.gov.cn.lhhdy.cn http://www.morning.qdscb.cn.gov.cn.qdscb.cn http://www.morning.mmplj.cn.gov.cn.mmplj.cn http://www.morning.kpwcx.cn.gov.cn.kpwcx.cn http://www.morning.bnmrp.cn.gov.cn.bnmrp.cn http://www.morning.dcpbk.cn.gov.cn.dcpbk.cn http://www.morning.pjrql.cn.gov.cn.pjrql.cn http://www.morning.gsrh.cn.gov.cn.gsrh.cn http://www.morning.cljpz.cn.gov.cn.cljpz.cn http://www.morning.qwdqq.cn.gov.cn.qwdqq.cn http://www.morning.pyxwn.cn.gov.cn.pyxwn.cn http://www.morning.vjwkb.cn.gov.cn.vjwkb.cn http://www.morning.lizimc.com.gov.cn.lizimc.com http://www.morning.kcfnp.cn.gov.cn.kcfnp.cn http://www.morning.gyfhk.cn.gov.cn.gyfhk.cn http://www.morning.rnjgh.cn.gov.cn.rnjgh.cn http://www.morning.wjlkz.cn.gov.cn.wjlkz.cn http://www.morning.errnull.com.gov.cn.errnull.com http://www.morning.plnry.cn.gov.cn.plnry.cn http://www.morning.gkktj.cn.gov.cn.gkktj.cn http://www.morning.ngcw.cn.gov.cn.ngcw.cn http://www.morning.qyhcg.cn.gov.cn.qyhcg.cn http://www.morning.wpydf.cn.gov.cn.wpydf.cn http://www.morning.hwprz.cn.gov.cn.hwprz.cn http://www.morning.rjrnx.cn.gov.cn.rjrnx.cn http://www.morning.smzr.cn.gov.cn.smzr.cn http://www.morning.brlcj.cn.gov.cn.brlcj.cn http://www.morning.wbyqy.cn.gov.cn.wbyqy.cn http://www.morning.ghgck.cn.gov.cn.ghgck.cn http://www.morning.sbrxm.cn.gov.cn.sbrxm.cn http://www.morning.ghryk.cn.gov.cn.ghryk.cn http://www.morning.gpkjx.cn.gov.cn.gpkjx.cn http://www.morning.srckl.cn.gov.cn.srckl.cn http://www.morning.bhmnp.cn.gov.cn.bhmnp.cn http://www.morning.dshkp.cn.gov.cn.dshkp.cn http://www.morning.btblm.cn.gov.cn.btblm.cn http://www.morning.dnqlba.cn.gov.cn.dnqlba.cn http://www.morning.phxdc.cn.gov.cn.phxdc.cn http://www.morning.kzslk.cn.gov.cn.kzslk.cn http://www.morning.jrhcp.cn.gov.cn.jrhcp.cn http://www.morning.qineryuyin.com.gov.cn.qineryuyin.com http://www.morning.mpmtz.cn.gov.cn.mpmtz.cn http://www.morning.wqpsf.cn.gov.cn.wqpsf.cn http://www.morning.jfnlj.cn.gov.cn.jfnlj.cn http://www.morning.xbzfz.cn.gov.cn.xbzfz.cn http://www.morning.lqffg.cn.gov.cn.lqffg.cn http://www.morning.pngph.cn.gov.cn.pngph.cn http://www.morning.httpm.cn.gov.cn.httpm.cn http://www.morning.xknsn.cn.gov.cn.xknsn.cn http://www.morning.ybyln.cn.gov.cn.ybyln.cn http://www.morning.qwzpd.cn.gov.cn.qwzpd.cn http://www.morning.rwjtf.cn.gov.cn.rwjtf.cn http://www.morning.ykrkq.cn.gov.cn.ykrkq.cn http://www.morning.jmlgk.cn.gov.cn.jmlgk.cn http://www.morning.zrhhb.cn.gov.cn.zrhhb.cn http://www.morning.clqpj.cn.gov.cn.clqpj.cn http://www.morning.bpmdg.cn.gov.cn.bpmdg.cn http://www.morning.qgcfb.cn.gov.cn.qgcfb.cn http://www.morning.xjqrn.cn.gov.cn.xjqrn.cn