Chinaunix首页 | 论坛 | 博客
  • 博客访问: 782906
  • 博文数量: 143
  • 博客积分: 2077
  • 博客等级: 大尉
  • 技术积分: 2393
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-28 12:57
文章存档

2016年(2)

2015年(3)

2014年(3)

2013年(41)

2012年(94)

分类: LINUX

2012-10-21 18:28:33

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) |
给主人留下些什么吧!~~