工程管理器make————如何编写makefie文件(其关键就是编写makefile文件)
1、什么是工程?
多个源文件+其他文件(图片、头文件、脚本文件)
2、工程管理器的作用
编译多个源文件(自动编译,make一下);(如果没有makefile:如:gcc + 所有源文件 -o 可执行文件;)
3、make的工作是依赖于makefile文件(makefile 文件是一种脚本文件,批处理:一次处理几个步骤)
4、编写makefile的语法:
三要素:目标、依赖、命令
格式:
目标:依赖
(tab键)命令
目标:最终生成的文件;(如:hello)
依赖:生成目标时所需要的文件(如:hello.c)
命令:生成目标时,所需要执行的命令(如:gcc hello.c -o hello)
gcc -c hello.c (该命令可以生成 hello.o文件; (.o 目标文件)(.a 静态库文件))
5、执行顺序(从上往下,寻找跳跃式执行)
在命令行中输入以下命令:
make :默认从第一个目标体开始执行
make + 目标体 :从对应的目标体开始执行
如果目标体后面的依赖文件是一个目标的话,先执行依赖对应的目标,在执行目标体的命令。
自动编译:源代码修改,或者编译生成的文件不存在,make一下自动编译。
6、关于伪目标的问题
所谓真目标就是可以通过执行命令生成目标文件,那么我们说,假目标就是执行命令后,无法生成目标文件,只是执行了相应的功能命令
.PHONY: (伪目标名)
伪目标执行不会生成文件,只会执行对应的命令;如:下图clean这个目标不会产生,只会执行它对应的命令。
7、相关语法
@ +(命令):可以取消回显;
echo +(内容):可以在命令行中直接显示;
make -f +(文件名) :可以指定某个文件(否则系统会默认makefile)
$@ :标识目标文件的名称 (上图中gcc语句中的hello文件,可以用该符号代替)
$^ :表示所有的依赖文件(上图中gcc语句中的hello.o文件,可以用该符号代替)
$< :表示第一个依赖文件
练习1:编写并运用makefile;
要求:写一个hello.cpp, 编写makefile, 命令行中不用回显命令,需要提示:make done!;将可执行文件main复制到创建好的bin 文件中。
伪目标:clean、install
@ : 取消回显;echo: 将内容显示在命令行;
main:function.cpp main.cpp
@g++ function.cpp main.cpp -o main
@echo have done!
.PHONY:clean
clean:install
@rm -rf main
@echo delete done!
install:
@cp main bin
@echo cp done!
练习2:写一个main的可执行文件的makefile,有三个.c文件;
要求:将三个add.c、sub.c、main.c文件 编译伪.o文件后,在生成main可执行文件;还要能够一键make删除.o文件和main可执行文件。
main:add.o sub.o main.o
gcc $^ -o $@
add.o:add.c
gcc -c add.c
sub.o:sub.c
gcc -c sub.c
main.o:main.c
gcc -c main.c
.PHONY:clean
clean:
rm -rf add.o sub.o main.o