制作网站需要的软件,建筑设计费一般多少钱一平方,wordpress自带301,百度直播推广对于makefile#xff0c;掌握一个规则#xff0c;两个变量和三个函数。下面介绍一个规则。
makefile的作用#xff1a;一个项目代码的管理工具。当一个项目的代码文件数#xff08;如.c文件#xff09;太多#xff0c;用gcc编译会太麻烦#xff0c;如果全部文件一次性编…对于makefile掌握一个规则两个变量和三个函数。下面介绍一个规则。
makefile的作用一个项目代码的管理工具。当一个项目的代码文件数如.c文件太多用gcc编译会太麻烦如果全部文件一次性编译一个文件有错误所有文件都需要重新编译。如果每个文件单独编译则十分麻烦。因此就有项目代码管理工具makefile。项目代码编译管理节省编译项目的时间一次编写终身受益。
[rootlocalhost src]# ls add.c div.c libM1.so main.c mul.c sub.c [rootlocalhost src]# gcc -pedantic -Wall -pipe -ggdb3 *.c -o zsx -I ../include/ [rootlocalhost src]# ls add.c div.c libM1.so main.c mul.c sub.c zsx //可以看出最终只是生成了zsx目标文件因此有一个.c文件改变了就会全部重新编译然后链接。 [rootlocalhost src]# ./zsx sum 26
规则如下
规则中的三要素目标依赖命令
目标依赖条件 命令 //tab缩进必须要缩进
[rootlocalhost src]# ls add.c div.c libM1.so main.c mul.c sub.c [rootlocalhost src]# vim makefile zsx:main.c sub.c add.c mul.c div.c gcc -pipe -pedantic -Wall -ggdb3 main.c sub.c add.c mul.c div.c -o zsx -I ../include //第二行必须有一个tab缩进
[rootlocalhost src]# make gcc -pipe -pedantic -Wall -ggdb3 main.c sub.c add.c mul.c div.c -o zsx -I ../include [rootlocalhost src]# ls add.c div.c libM1.so main.c makefile mul.c sub.c zsx [rootlocalhost src]# ./zsx sum 26 //上述中生成的最终文件zsx自动会跟makefile文件在同一个目录。注意两点1.对于依赖条件中的几个文件如果不跟makefile在同一个目录的话必须指定其所在目录如../main.c、/mnt/hgfs/shared/ggc/Calc/add.c等这样makefile才能找到依赖条件所需的文件在哪里2.在命令中要分析清楚该命令是否需要指出头文件、库文件-I -L -static -l)。
举例
[rootlocalhost src]# ls add.c div.c libM1.so main.c makefile mul.c sub.c [rootlocalhost src]# vim makefile zsx:main.o add.o sub.o mul.o div.o gcc -ggdb3 main.o add.o sub.o mul.o div.o -o zsx main.o:main.c gcc -pedantic -Wall -pipe -c main.c -o main.o -I ../include add.o:add.c gcc -pedantic -Wall -pipe -c add.c -o add.o sub.o:sub.c gcc -pedantic -Wall -pipe -c sub.c -o sub.o mul.o:mul.c gcc -pedantic -Wall -pipe -c mul.c -o mul.o div.o:div.c gcc -pedantic -Wall -pipe -c div.c -o div.o
[rootlocalhost src]# make gcc -pedantic -Wall -pipe -c main.c -o main.o -I ../include //生成main.o gcc -pedantic -Wall -pipe -c add.c -o add.o //生成add.o gcc -pedantic -Wall -pipe -c sub.c -o sub.o //生成sub.o gcc -pedantic -Wall -pipe -c mul.c -o mul.o //生成mul.o gcc -pedantic -Wall -pipe -c div.c -o div.o //生成div.o gcc -ggdb3 main.o add.o sub.o mul.o div.o -o zsx //生成最终目标 且最后链接时加上调试信息 -ggdb3 [rootlocalhost src]# ./zsx sum 26 [rootlocalhost src]# ls add.c add.o div.c div.o libM1.so main.c main.o makefile mul.c mul.o sub.c sub.o zsx //可以看出既生成了以及中间文件.o还生成了最终目标文件zsx。因为几个中间文件.o在makefile中也是目标文件为次级目标文件。 [rootlocalhost src]# make make: zsx is up to date. //可以发现再次make没有反应这是因为make检测到所有的文件都是最新的即没有改动过因此不需要再次做重复的工作。 [rootlocalhost src]# rm -f zsx [rootlocalhost src]# make gcc -ggdb3 main.o add.o sub.o mul.o div.o -o zsx //此时make有了反应因为make检测到zsx目标文件删除了因此只需要执行最后一步链接操作即可。 [rootlocalhost src]# ./zsx sum 26
[rootlocalhost src]# vim add.c //修改了add.c的内容
[rootlocalhost src]# make
gcc -pedantic -Wall -pipe -c add.c -o add.o //只是重新编译了add.c编译很费时间
gcc -ggdb3 main.o add.o sub.o mul.o div.o -o zsx //更新最终目标 链接不费时间
//最终目标一定要写在第一行如果未写在第一行则需要all:zsx -- all指定生成的最终目标为zsx
总结