Makefile编写的方式


本篇内容主要讲解“Makefile编写的方式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Makefile编写的方式”吧!1. make和Makefile的介绍1.1 make工具利用make工具可以自动完成编译工作。这些工作包括:如果仅仅修改了某几个源文件,则只重新编译这几个源文件;如果某个头文件被修改,则重新编译所有包含该头文件的源文件。利用这种自动编译可大大简化开发工作,避免不必要的重新编译。1.2 Makefilemake工具通过一个称为Makefile的文件来完成并自动维护编译工作。Makefile文件描述了整个工程的编译、链接等规则。2. Makefile基本规则TARGET …:DEPENDENCIES …C 香港云主机OMMAND…目标(TARGET)程序产生的文件,如可执行文件和目标文件;目标也可以是要执行的动作,如clean,也称伪目标。依赖(DEPENDENCIES)是用来产生目标的输入文件列表,一个目标通常依赖于多个文件。命令(COMMAND)是make执行的动作(命令是shell命令或者是可在shell下执行的程序)。注意:每个命令行的起始字符必须为TAB字符。如果DEPENDENCIES中有一个或多个文件更新的话,COMMAND就要执行,这就是Makefile最核心的内容。接下来就根据这个Makefile基本规则来编写一个最基本的Makefile文件.PHONY:cleanmain:main.o sub.o add.o print.ogcc -Wall -g main.o add.o sub.o print.o -o mainmain.o:main.cgcc -Wall -g -c main.c -o main.oadd.o:add.c add.hgcc -Wall -g -c add.c -o add.osub.o:sub.c sub.hgcc -Wall -g -c sub.c -o sub.oprint.o:print.c print.hgcc -Wall -g -c print.c -o print.oclean:rm -f *.o main我们可以看到,main是我们最终想要生成的目标文件,它依赖main.o sub.o add.o print.o这四个.o文件。因此要执行gcc -Wall -g main.o add.o sub.o print.o -o main命令来生成目标文件,但是当前没有这些.o文件,因此就要先生成这些.o文件。我们写了四条**.o:**.c然后执行gcc -Wall -g -c **.c -o **.o,这些语句就会生成目标文件的依赖项。clean是一个伪目标文件,因为它没有依赖项。我们只是想通过make clean来将.o文件删除,但是我们通常要指定.PHONY:clean这条语句,用来显式的指定clean是伪目标,来防止当前目录下有一个同名的clean文件。这样,一个简单呢的Makefile文件就写好了。3. Makefile自动化变量虽然像上述那样可以完成编译,但是明显非常麻烦,接下来介绍Makefile的自动化变量。选项名 作用$@ 规则的目标文件名$
$^ 规则的所有依赖文件列表我们使用这些自动化变量来尝试从写刚才的Makefile.PHONY:cleanOBJ=main.o sub.o add.o print.omain:$(OBJ)gcc -Wall -g $^ -o $@main.o:main.cgcc -Wall -g -c $
add.o:add.c add.hgcc -Wall -g -c $
sub.o:sub.c sub.hgcc -Wall -g -c $
print.o:print.c print.hgcc -Wall -g -c $
clean:rm -f *.o main我们定义了一个变量叫OBJ,他是我们的依赖项列表。然后使用自动化变量来代替对应的文件,如上所示。但是,我们这些.c文件都要生成.o文件,这样写也非常麻烦,我们介绍另一些规则。模式规则%.o:%.c后缀规则.c:.o我们来使用这两种规则:.PHONY:cleanCC = gccCFLAGS = -Wall -gOBJ = main.o sub.o add.o print.omain:$(OBJ)$(CC) $(CFLAGS) $^ -o $@#%.o:%.c.c.o:$(CC) $(CFLAGS) -c $
clean:rm -f *.o main使用这两个规则,就会将所有.c文件生成同名的.o文件,这样,Makefile就更加简洁。4. make常用的内嵌函数函数调用$(function arguments)$(wildcard PATTERN)当前目录写的匹配模式的文件例如:src=$(wildcard *.c)$(patsubst PATTERN,REPLACEMENT,TEXT)模式替换函数例如:$(patsubst %.c, %.o, $src)等价于$(src:.c=.o)shell函数执行shell命令例如:$(shell ls -d */)到此,相信大家对“Makefile编写的方式”有了更深的了解,不妨来实际操作一番吧!这里是开发云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

相关推荐: sonarqube中怎么添加阿里java开发规范

这篇文章给大家介绍sonarqube中怎么添加阿里java开发规范,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。拉取sonar-pmd源码,切换到3.2.1。修改pom文件添加p3c-pmd依赖:开始配置阿里Java规范,此处演示配置规则…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 07/30 10:12
下一篇 07/30 10:12

相关推荐