GNU Make笔记

Make语法规则:
通常规则的语法格式如下:
TARGETS : PREREQUISITES
              COMMAND...

或者:
TARGETS : PREREQUISITES ; COMMAND
      
COMMAND
       
...


1.函数wildcard
  
用法: $(wildcard PATTERN)
   解释:
Makefile中,它被展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表。
  例子:
ifneq ($(wildcard $(USR_LIB_DIR)/libboost_thread.so),)
LIB_BOOST_THREAD :
= -lboost_thread 

   objects := $(patsubst %.c,%.o,$(wildcard *.c))
  
foo : $(objects)
        
cc -o foo $(objects) 

2.
变量VPATH
   特殊变量“VPATH”。通过变量“VPATH”可以指定依赖文件的搜索路径,当规则的依赖文件在当前目录不存在时,make会在此变量所指定的目录下去寻找这些依赖文件。
     
定义变量“VPATH”时,使用空格或者冒号(:)将多个需要搜索的目录分开。
     
VPATH = src:../headers

依赖指定了两个搜索目录,“src”和“../headers”。对于规则“foo:foo.c”如果“foo.c”存在于“src”目录下,此规则等价于“foo:src:/foo.c”。
注意:此VPATH变量只对依赖有效,对于命令command无效.


3.变量vpath
 
   vpath”关键字(全小写的)。它不是一个变量,而是一个make的关键字,它所实现的功能和上一小节提到的“VPATH”变量很类似,但是它更为灵活。它可以为不同类型的文件(由文件名区分)指定不同的搜索目录。
      其用法有三种:
           (1)vpath PATTERN DIRECTORIES      为所有符合模式“PATTERN”的文件指定搜索目录“DIRECTORIES
         (2)
vpath PATTERN    清除之前为符合模式“PATTERN”的文件设置的搜索路径。
         (3)
vpath  清除所有

eg. vpath %.h ../headers

    其含义是:Makefile中出现的.h文件;如果不能在当前目录下找到,则到目录“../headers”下寻找。

一个使用vpath的例子:

vpath %.h inc
vpath 
%.cpp src
vpath 
%.c src


CC 
= g++
USR_LIB_DIR 
= /usr/lib
USR_LOCAL_LIB_DIR 
= /usr/local/lib
INCLUDES 
= inc
APPS 
= QoeGW
LIB_XMLRPC_CLIENT 
= $(shell xmlrpc-c-config client --ldadd)
LIBS 
= -lboost_program_options -lboost_thread-mt -lpcap -llog4cxx $(LIB_XMLRPC_CLIENT)

OBJS 
= G1070.o logInFile.o pcapIPv6.o parseRTP.o rtpQueue.o xmlrpc_client.o QoeGW.o

all:
$(APPS)

$(APPS):$(OBJS)
    
$(CC) $(OBJS) -$(APPS) $(LIBS) -$(INCLUDES)

%.o:%.cpp
    
$(CC) --$(INCLUDES) $<

.PHONY:clean
clean:
    rm 
*.o $(APPS)


待更新....
posted @ 2008-05-28 16:50  shipfi  阅读(453)  评论(1编辑  收藏