![](https://img-blog.csdnimg.cn/48f87b7f2f224ac19c5fc28b8e851bc3.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
MakeFile
MakeFile
WongKyunban
这个作者很懒,什么都没留下…
展开
-
makefile变量
在声明变量时需要初始化。通过在变量名前加上 $ 符号引用变量,最好用上小括号 () 或大括号 {} 把变量括起来。变量是大小写敏感的。如果需要用 $ 字符,那么需要用 $$ 来表示。 变量可以使用在规则中的“目标”、“依赖”、“命令”中及新的变量中。如:CC = gccOBJS = program.o foo.o utils.oprogram : $(OBJS) $(CC) -o pr...原创 2019-11-26 00:55:40 · 2473 阅读 · 0 评论 -
makefile自动生成依赖性
在Makefile文件中,我们的依赖关系中可能会包含一系列的头文件,当工程比较大时,我们必须搞清楚哪些.c文件包含了哪些头文件,在加入或删除这些头文件时,都要修改Makefile文件。这样的修改很麻烦,而且很容易修改错。为了避免上面这种繁重又容易出错的工作,我们可以使用C/C++编译器自动寻找源文件中包含的头文件,并生成一个依赖关系 ,命令如下:gcc -MM main.c 或gcc -...原创 2019-11-25 16:54:50 · 2104 阅读 · 0 评论 -
makefile静态模式解决多目标问题
静态模式可以更加容易地定义多目标的规则,可以让我们的规则变得更加的有弹性和灵活。格式:<targets ...> : <target-pattern> : <prereq-patterns ...> <commands>...说明:<targets …> :定义了一系列的目标文件,可以有通配符。<target-pat...原创 2019-11-24 17:21:05 · 1986 阅读 · 0 评论 -
Makefile多目标
Makefile 规则中目标可以有多个。如需要生成多个可执行文件的做法。使用伪目标的方法,给伪目标指定所依赖的文件:all:main hello test.PHONY:allmain: gcc -o main main.chello: gcc -o hello hello.ctest: gcc -o test test.c.PHONY:...原创 2019-11-23 15:56:34 · 3149 阅读 · 0 评论 -
makefile命令出错
当执行某个规则出现错误时,会马上停止该目标和该目标的依赖目标的生成。如何忽略错误,继续生成此目标之上的所有其它目标呢?演示例子:r1:r2 r3 echo 1r2:r21 echo 2 cat tes.txt #tes.txt不存在,故意指定这条出错r21: echo 21r3:r31 echo 3r31:...原创 2019-11-20 09:18:01 · 3022 阅读 · 0 评论 -
makefile命令执行
当依赖文件修改时间比目标文件要新,make命令就会一条一条地执行其后的命令。如果我们想让上一条命令执行的结果应用到下一条命令上,那么我们就应该将这两条命令写在一行上,并使用分号分隔,而不是写成两行。正确写法:exec: cd /home/kyun/Desktop;pwd执行结果:~/Desktop/mydir$ make execcd /home/kyun/Deskto...原创 2019-11-19 23:56:07 · 2559 阅读 · 0 评论 -
makefile显示命令
每条命令的开头必须以 Tab 键开头,除非命令是跟在依赖规则后的分号后面。在命令行之间中的空格或者空行会被忽略,但是如果该空格或空行是以 Tab 键开头的,那么 make 会认为其是一个空命令。如果我们在编译过程中,可以显示正在编译哪一步,就会很方便我们对程序编译的监控。我们可以使用makefile的一些显示命令,添加上一些类似注释的信息,伴随编译的过程打印到控制台上。在makefile中,当...原创 2019-11-19 15:43:08 · 3044 阅读 · 0 评论 -
makefile规则中的伪目标
在makefile规则的一般形式:目标文件:依赖文件 执行命令说明:执行命令会将依赖文件编译成目标文件。而“伪目标”不是一个目标文件,只是一个标签而已。由于“伪目标”不是文件,所以 make无法生成它的依赖关系和决定它是否要执行,只能通过在执行make命令时显式地指明这个“目标”才能让其效。伪目标例子:clean: rm *.o temp显式执行“伪目标”:~/Desktop...原创 2019-11-19 10:32:53 · 2188 阅读 · 0 评论 -
在makefile的规则中使用通配符
make 支持三个通配符:* : 星号(*)代替了一系列的文件,如 *.c 表示所有后缀为 c 的文件。~ :波浪号(~ )在文件名中有特殊用途,如 ~/test 当前用户的家目录下的test目录(Linux环境下)。?注意:CFILES = *.c通配符同样可以用在变量中,但是 *.o 不会展开,所以CFILES的值就是 *.c 。在makefile中变量,相当于 C/C++ ...原创 2019-11-18 17:17:00 · 2556 阅读 · 0 评论 -
Makefile文件的组成及引用其它的Makefile和make的工作方式
makefile的介绍可以参考《makefile介绍及示例》Makefile文件由五部分组成:显式规则:显式指出生成的目标文件、依赖的文件、生成命令。隐式规则:利用make的自动推导功能,可以简化规则的编写,参考《make命令的自动推导》。变量定义:定义一系列的变量,可以在Makefile文件其他地方引用。文件指示:包括三部分,(1)一个是在一个 Makefile 中引用另一个 Mak...原创 2019-11-18 16:13:53 · 2382 阅读 · 0 评论 -
清空目标文件的规则
每个 Makefile 中都应该写一个清空目标文件(.o 和执行文件)的规则,这不仅利于重新编译,也有利于保持文件清洁。一般的风格:clean: rm app $(OBJECTS) 更好的做法是:.PHONY:cleanclean: -rm app $(OBJECTS) .PHONY 表示 clean 是一个“伪目标”。而在 rm 命令前面加了一个小减...原创 2019-11-18 10:28:33 · 1971 阅读 · 0 评论 -
makefile的收拢式表达依赖关系
在上篇《make命令的自动推导》中,我们利用make的自动推导简化了makefile:OBJECTS = main.o hello.oapp:$(OBJECTS) gcc -o app $(OBJECTS) main.o:hello.hhello.o:hello.hclean: rm app $(OBJECTS) 我们可以看到下面的内容,hello.h...原创 2019-11-18 09:44:04 · 1837 阅读 · 0 评论 -
make命令的自动推导
GNU 的 make 可以自动推导文件以及文件依赖关系后面的命令。因此,我们就没必要在每个 .o 文件后都写上类似的命令, make命令会自动识别,并进行推导命令。当make命令看到一个 .o 文件,它就会自动把 .c 文件加在依赖关系中,例如make找到main.o,就可以推导出main.c就是main.o的依赖文件,并且推导出要执行的命令gcc -c main.c。所以,我们的makefi...原创 2019-11-18 00:25:14 · 2024 阅读 · 0 评论 -
在makefile 中变量的使用
演示示例:app:main.o hello.o gcc -o app main.o hello.omain.o:main.c hello.h gcc -c main.chello.o:hello.c hello.h gcc -c hello.cclean: rm app main.o hello.o先让我们看看 app ...原创 2019-11-18 00:07:17 · 1924 阅读 · 0 评论 -
make命令的工作原理
编译程序时,我们通常直接在makefile文件所在目录下执行make命令:makefile:app:main.o hello.o gcc -o app main.o hello.omain.o:main.c hello.h gcc -c main.chello.o:hello.c hello.h gcc -c hello.cclean: ...原创 2019-11-17 12:04:28 · 4024 阅读 · 0 评论 -
makefile介绍及示例
概述一个开发工程会有很多的源文件,它们按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译等。makefile文件关系到整个工程的编译规则。写好的makefile,只要运行make命令,就会按makefile里定义好的规则来编译工程。make 是一个用来解析makefile文件中的指令的命令工具。大多数的...原创 2019-11-17 10:54:10 · 1976 阅读 · 0 评论