加入收藏 | 设为首页 | 会员中心 | 我要投稿 佛山站长网 (https://www.0757zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

Make命令教程

发布时间:2016-10-13 14:03:44 所属栏目:语言 来源:阮一峰博客
导读:Make是最常用的构建工具,诞生于1977年,主要用于C语言的项目。但是实际上 ,任何只要某个文件有变化,就要重新构建的项目,都可以用Make构建。

3.8 判断和循环

Makefile使用 Bash 语法,完成判断和循环。

ifeq ($(CC),gcc)

     libs=$(libs_for_gcc)

else

     libs=$(normal_libs)endif

上面代码判断当前编译器是否 gcc ,然后指定不同的库文件。

LIST = one two three

all:

for i in $(LIST); do

echo $$i;

done

# 等同于

all:

for i in one two three; do

echo $i;

done

上面代码的运行结果。

one

two

three

3.9 函数

Makefile 还可以使用函数,格式如下。

$(function arguments)

# 或者$

{function arguments}

Makefile提供了许多内置函数,可供调用。下面是几个常用的内置函数。

(1)shell 函数

shell 函数用来执行 shell 命令

srcfiles := $(shell echo src/{00..99}.txt)

(2)wildcard 函数

wildcard 函数用来在 Makefile 中,替换 Bash 的通配符。

srcfiles := $(wildcard src/*.txt)

(3)subst 函数

subst 函数用来文本替换,格式如下。

$(subst from,to,text)

下面的例子将字符串"feet on the street"替换成"fEEt on the strEEt"。

$(subst ee,EE,feet on the street)

下面是一个稍微复杂的例子。

comma:= ,

empty:=

# space变量用两个空变量作为标识符,当中是一个空格

space:= $(empty)$(empty)

foo:= a b c

bar:= $(subst $(space),$(comma),$(foo))

# bar is now `a,b,c'.

(4)patsubst函数

patsubst 函数用于模式匹配的替换,格式如下。

$(patsubst pattern,replacement,text)

下面的例子将文件名"x.c.c bar.c",替换成"x.c.o bar.o"。

$(patsubst %.c,%.o,x.c.c bar.c)

(5)替换后缀名

替换后缀名函数的写法是:变量名 + 冒号 + 后缀名替换规则。它实际上patsubst函数的一种简写形式。

min: $(OUTPUT:.js=.min.js)

上面代码的意思是,将变量OUTPUT中的后缀名 .js 全部替换成 .min.js 。

四、Makefile 的实例

(1)执行多个目标

.PHONY: cleanall cleanobj cleandiff

cleanall : cleanobj cleandiff

    rm program

cleanobj :

    rm *.o

cleandiff :

    rm *.diff

上面代码可以调用不同目标,删除不同后缀名的文件,也可以调用一个目标(cleanall),删除所有指定类型的文件。

(2)编译C语言项目

edit : main.o kbd.o command.o display.o

    cc -o edit main.o kbd.o command.o display.o

main.o : main.c defs.h

    cc -c main.c

kbd.o : kbd.c defs.h command.h

    cc -c kbd.c

command.o : command.c defs.h command.h

    cc -c command.c

display.o : display.c defs.h

    cc -c display.c

clean :

    rm edit main.o kbd.o command.o display.o

.PHONY: edit clean

今天,Make命令的介绍就到这里。下一篇文章我会介绍,如何用 Make 来构建 Node.js 项目。

我的参考资料主要是Isaac Schlueter的Makefile文件教程:https://gist.github.com/isaacs/62a2d1825d04437c6f08和GNU Make手册:https://www.gnu.org/software/make/manual/make.html。

(编辑:佛山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读