make与configure、makefile
因为一套软件并不会仅有一个程序,而是有一堆程序代码文件,因此用类似gcc的编译程序来进行编译并不简单。这时候我们可以使用make这个命令的相关功能来进行编译过程的简化了。
当执行make时,make会在当前的目录下搜索 makefile 这个文本文件,而 makefile 里面则记录了源码如何编译的详细信息。
make 是一个程序,会去找 makefile 。通常软件开发商都会写一个检测程序(configure或config)来检测用户的操作环境,检测完毕后就会主动创建这个makefile的规则文件。
makefile的基本语法与变量
基本规则为:
目标(target):目标文件1 目标文件2
gcc -o 欲新建的可执行文件 目标文件1 目标文件2
那个target就是我们想要建立的信息,命令行必须要以tab键作为开头!
在makefile当中的 # 代表批注;
需要在命令行的第一个字符;
目标与相关文件之间需要以“:”隔开。
例子:我们来编辑一个规则,名称为clean,执行时清除掉所有的目标文件与可执行文件。
#vi makefile
main:main.o haha.o sin_value.o cos_value.o
gcc -o main main.o haha.o sin_value.o cos_value.o -lm
clean:
rm -f main main.o haha.o sin_value.o cos_value.o
这样,我们的makefile里面就有两个目标,分别是main与clean,如果我们想建立main的话,输入“ make main”,如果想要清除信息,输入“make clean”即可。如果要清除再编译main这个程序,就输入“make clean main”。
#make clean
当然,我们也可以通过脚本中的变量来简化makefile.
#vi makefile
LIBS = -lm
OBJS = main.o haha.o sin_value.o cos_value.o
main:${OBJS}
gcc -o main ${OBJS} ${LIBS}
clean:
rm -f main ${OBJS}
这个与bash脚本的语法有点不同,基本为下面这样:
1.变量与变量内容以“=”隔开,同时两边可以具有空格;
2.变量左边不可以有,例如上面范例的第一行LIBS左边不可以是;
3.变量与变量内容在“=”两边不能有“:”;
4.在习惯上,变量最好是以大写字母为主;
5.运用变量时,以${变量}或$(变量)使用;
6.在该shell的环境变量时可以被套用的;
7.在命令行模式也可以定义变量。
我们可以利用命令进行环境变量的输入,也可以在文件内直接指定环境变量,环境变量的取用规则为:
1.make命令行后面加上的环境变量为第一优先;
2.makefile里面指定的环境变量第二优先;
3.shell原本具有的环境变量第三优先。
还要注意, $@ :代表目前的目标。
如: main:${OBJS}
gcc -o $@ ${OBJS} ${LIBS} 这个$@就是main.
makefile的书写的规则很多,这里不能一一列出,主要也是因为能力有限,才开始学习linux.我看到网上一篇很经典的也很全面的makefile文章,《跟我一起写makefile》,已经传至附件,供大家学习参考,转帖时请注明文章的作者及出处,未经作者允许不能用于商业目的。
阅读(2793) | 评论(0) | 转发(1) |