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) |