标签:基本 文件 gcc makefile calcu 语法 clean input main
1.makefile的引入
main.c为主体,input.c负责接收从键盘输入的数值,calcu.h进行任意两个数相加
main.c

input.c

input.h

calcu.c

calcu.h

这里面当代码特别多的时候
gcc main.c input.c calcu.c -o main
这行代码就比较长
有一种办法是分别把main,input, calcu编译成点o文件,然后再gcc连接
gcc -c main.c
gcc -c input.c
gcc -c calcu.c
gcc main.o input.o calcu.o - o main
这样以后只要我修改了calcu.c, 只需要gcc -c calcu.c,然后再链接,节省了时间
但是这样编译的代码量增大了,所以采用了makefile
2.Makefile

3.makefile基本语法
基本语法
目标:依赖集合
命令1
命令2
(命令列表中每条命令必须以TAB键开始, 不能用空格)
默认的第一个目标就是终极目标
makefile变量的使用
# 变量使用
objects = main.o input.o calcu.o
main: $(objects)
gcc -o main $(objects)

不加@就会把所执行的命令打印出来的
注意此时输出的是shaozheming,=号的值取决于name的值,加上:=就不会这个问题
?=:如果前面赋值了就用前面的值, 没有赋值就用?=后面的值
+=:类似字符串拼接
makefile模式规则
类似通配符的规则
%.o : %.c
自动化变量
上面的通配符规则虽然大大减少了代码量,但是在
gcc -c main.c 这里面的main不能换成%
常用的几种:
$@ : 规则中的目标集合,如果有多个目标,表示匹配模式中定义的目标集合
$< : 依赖文件集合的第一个文件,如果依赖文件是以%定义的,那么这个就是符合模式的一系列文件集合
$^ : 所有依赖文件集合,使用空格分开。如果在依赖文件中有多个重复文件,他会去除重复文件,只保留一份

伪目标
伪目标是为了避免Makefile中定义的只执行命令的目标和工作目录下的市级文件出现名字冲突,比如clean,这个就是只执行下面的命令而不是生成文件,因此工作目录下永远不会存在文件clean,所以属于make clean,这个命令一定执行。但当我们手贱在工程目录下创建一个clean文件,规则因为没有依赖文件,所以这个clean文件是最新的,那后面的rm命令也不会执行。为避免这个问题,可以将clean声明为伪目标。声明方式为:
.PHONY : clean
标签:基本,文件,gcc,makefile,calcu,语法,clean,input,main 来源: https://www.cnblogs.com/yoshinb/p/15548337.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。
