Chinaunix首页 | 论坛 | 博客
  • 博客访问: 425872
  • 博文数量: 116
  • 博客积分: 7087
  • 博客等级: 少将
  • 技术积分: 1175
  • 用 户 组: 普通用户
  • 注册时间: 2005-02-19 23:32
文章分类

全部博文(116)

文章存档

2012年(1)

2011年(2)

2010年(10)

2009年(21)

2008年(18)

2007年(12)

2006年(21)

2005年(31)

我的朋友

分类:

2007-11-12 10:23:11

Makefile的技巧很多,今天再记录比较有用的2条。

1.变量VPATH
  VPATH=virtual path,类似于系统的PATH环境变量,不过只用于makefile内部而已。
  VPATH定义了搜索路径。如果依赖的对象没有加上路径名,那么make会自动按照搜索路径去找依赖的对象。
  当你想把文件按性质归类存放时,它的好处就出来了。它可以让makefile看起来比较简洁,没有那么多的文件目录加在依赖对象前。
  例如你建立了以下目录结构:
  project
  |-------src
  |-------obj
  |-------bin
  源代码放在src里,目标文件放在obj下,执行文件放在bin下
  在写makefile的时候,通过定义vpath=src:obj:bin,接下来写依赖关系的时候,就很简单了。

  exe_file: obj1.o obj2.o
            g++ obj/obj1.o obj/obj2.o -o bin/exe_file
  obj1.o: src.c
            g++ src/src.c -o obj/obj1.o
  obj2.o: src2.c
            g++ src/src2.c -o obj/obj1.o
2.外部定义宏
   以前都是在头文件或者源文件中定义宏,其实也可以在编译的时候,临时指定。如果每次编译都要指定一大串,自然也不方便,但是放在makefile里,就很简单了。
DATFILE=$(BASE)/dat/lottery_history.dat
exe_file:obj1.o
         g++ -DDATFILE='"$(DATFILE)"' obj/obj1.o -o exe_file
这里用''来保护里面那对"不会被系统转换成空。这样编译系统就会把这个宏作为字符串处理,否则就会认为是个变量了。


 
阅读(1106) | 评论(0) | 转发(0) |
0

上一篇:有关Objective-C的编译方法

下一篇:ksh or sh?

给主人留下些什么吧!~~