现在的位置: 首页 > 综合 > 正文

makefile从无到有

2013年04月05日 ⁄ 综合 ⁄ 共 1681字 ⁄ 字号 评论关闭

Makefile这玩意在上学时就应该学,可是一直沉浸于IDE的诱惑,所谓“死于安乐”,直到现在一把年纪才开始接触这种基础东西。

创建C程序

先写个c程序,保存在main.c里:

  1. //////////////////  
  2. // file: main.c  
  3. //////////////////  
  4.   
  5. #include <stdio.h>  
  6.   
  7. int main()  
  8. {  
  9.     int c = 0;  
  10.     printf("Tommy: %d\n", c+5);  
  11.     return 0;  
  12. }  


看看我这时的目录结构

  1. ~/code/makefile$ ls  
  2. main.c  


这时敲个“make”命令试试?

  1. ~/code/makefile$ make  
  2. make: *** 没有指明目标并且找不到 makefile。 停止。  

创建makefile文件

显然,我们要建个名为“makefile”的文件。先建一个空的名为makefile的文件:

  1. ~/code/makefile$ touch makefile  
  2. tommy@tommy-zheng-ThinkPad-T61:~/code/makefile$ ls  
  3. main.c  makefile  

这时再试试“make”命令:

  1. ~/code/makefile$ make  
  2. make: *** 无目标。 停止。  


加入target
错误“无目标”告诉我们需要在makefile里添加一些东西:

  1. # 注释 file: makefile  
  2. target:  

再执行“make”命令:

  1. ~/code/makefile$ make  
  2. make: 没有什么可以做的为 `target'。  

可以看到前面“无目标”的错误已经解决了。

加入命令

继续往makefile里添加东西:

  1. # 注释 file: makefile  
  2. target:  
  3.     gcc -o tommy main.c # 注意,最前面是tab,不是空格!  

好了,执行make命令:

  1. ~/code/makefile$ make  
  2. gcc -o tommy main.c  
  3. ~/code/makefile$ ls  
  4. main.c  makefile  tommy  

main.c被编译了,一个可执行文件“tommy”产生了。我们执行一下试试:

  1. ~/code/makefile$ ./tommy  
  2. Tommy: 5  


得意我们的makefile写完了!!!

 

好吧,之前的makefile实在是太简单,以至于没什么实际的用途。现在再深入研究下。

Target
在前面的makefile里,有一个叫"target"的东西。其实它可以是任何名字,而且一个makefile里可以有多个target。比如下面的makefile:

  1. # 注释 file: makefile  
  2. tommy:  
  3.     gcc -o tommy main.c # 注意,最前面是tab,不是空格!  
  4. dosomething:  
  5.     echo just for fun.  

给make命令一个参数:

  1. ~/code/makefile$ make dosomething  
  2. echo just for fun.  
  3. just for fun.  

可以看到,make可以用来执行任何一个target底下的命令,而这种命令并不局限于gcc这种编译的命令。每个target用冒号隔开。如果make命令没有指定哪个target,那第一个target下的命令会被执行。

Dependencies

make命令一次只能处理一个target,但如果我想一次处理多个target怎么办?这时可以为一个target在冒号后面指定它所依赖的target。修改下makefile:

  1. # 注释 file: makefile  

抱歉!评论已关闭.