Makefile开发工具学习小结

make命令与Makefile文件

1、 目的:解决大型程序编译多个源文件带来的问题,可以大大提高开发效率。
2、 Makefile文件主要告诉应用程序应该如何构造,一般与其他源文件放在同一目录。一个大的工程,可以用多个不同的makefile文件分别管理项目不同部分。
3、 Makefile语法:由一组依赖关系和规则组成
1) 每个依赖关系由一个目标和一组该目标所依赖的源文件组成。在makefile文件中,依赖的写法是:目标名称:(空格或tab)文件列表,
myapp: main.o 2.o (myapp为目标,依赖main.o 2.o)
这些依赖关系形成一个层次结构,显示了源文件之间的关系。
2) 规则描述了通过这些依赖文件创建目标,它定义了目标的创建方式。
例如
myapp: main.o 2.o (依赖关系)
gcc -o myapp main.o 2.o (规则)
4、 Makefile命令参数
1)-k:让makefile在发现错误后仍然继续执行,而不会停下来。可以利用此参数一次发现所有编译错误;
2)-n:让makefile输出将要执行的操作步骤,而不是真正去执行;
3)-f :告诉make命令将哪个文件作为makefile文件,默认会查找当前目录下的makefile和Makefile文件(makefile优先查找)
5、一个简单的makefile文件
在同一目录下创建:
Makefile:

helloapp: hello.o                                  (helloapp的依赖关系)
           gcc -o helloapp hello.o            (生成hello.o的规则)
hello.o: hello.c
           gcc -c hello.c

hello.c:

#include <stdio.h>

int main()
{
    printf("this is a Makefile test!\n");
    return 0;
}

执行过程:

# make
gcc -c hello.c
gcc -o helloapp hello.o
# ./helloapp
this is a Makefile test!

6、 Makefile的注释:注释以#号开头,一直延续到这一行的结束。
7、 Makefile的宏:可以很好的设置环境变量,移植性好。
定义宏:MACRONAME=value
使用宏:$(MACRONAME)
默认宏:

  • $? 当前目标所依赖的文件列表中比当前目标还要新的文件
  • $@ 当前目标名称
  • $< 当前依赖文件名称
  • $* 不包括后缀名的当前依赖文件的名称

8、 Makefile的clean和install
1) clean:用于删除不需要的目标文件
rm命令以-开头,减号的含义是让make命令忽略rm命令的执行结果,即即使目标文件不存在,也不会因为rm命令执行失败而返回错误。
格式:
clean:
-rm hello.o
2)install:用于将编译成功的应用程序安装
用于制作install目标的规则由几个shell脚本命令组成。由于make命令在执行规则时会调用一个shell,并且会针对每个规则使用一个新的shell,所以必须在上面每行代码结尾加上反斜杠\,让所有shell脚本命令处于逻辑上同一行;并且命令以@开头,表示make在执行这些规则之前不会在标准输出上显示命令本身。
install:
chmod u+x helloapp
./helloapp

上面将生成的可执行文件,直接执行。
这里写图片描述

猜你喜欢

转载自blog.csdn.net/cui841923894/article/details/82191674