Linux下makefile通用模版

  1. #*******************************************************************************  
  2. #  File name  : Makefile  
  3. #  Author     : weiming   
  4. #  Date       : 2012/06/14  
  5. #  cmd        : make  
  6. #*******************************************************************************  
  7.   
  8. #编译后可执行程序名称,可根据实际情况修改  
  9. SER_NAME = WM_SER     
  10. M_DATE=`date '+%y%m%d'`  
  11.   
  12.   
  13. #编译选项  
  14. CXX = g++  
  15. AR  = ar cr  
  16. COMPILE_FLAGS = -Wall  -ggdb -fpermissive  
  17.   
  18. #头文件路径,可根据实际情况增减  
  19. INCLUDE_PATH = -I. -I$(ORACLE_HOME)/rdbms/demo  -I$(ORACLE_HOME)/rdbms/public  
  20.   
  21. #链接库路径,可根据实际情况增减  
  22. #注意ORACLE库路径是否正确  
  23. LIB_PATH = -L. -L$(ORACLE_HOME)/lib    
  24.   
  25. #链接库,可根据实际情况增减  
  26. LIBS= -lclntsh -lpthread  
  27.   
  28. #源码文件,当前目录下所有cpp文件  
  29. SRC= $(wildcard *.cpp)    
  30.   
  31. #中间文件.o  
  32. OBJS=$(SRC:.cpp=.o)  
  33.   
  34.   
  35. #Makefile的终极目标all  
  36. all : $(OBJS) $(SER_NAME)  
  37.   
  38. .PHONY:all clean  
  39.   
  40.   
  41. $(SER_NAME):$(OBJS)  
  42.     $(CXX) -o $(SER_NAME)_$(M_DATE) $(OBJS) $(INCLUDE_PATH) $(LIB_PATH) $(LIBS)  
  43.   
  44. %.o : %.cpp  
  45.     $(CXX) -c $(COMPILE_FLAGS) $(INCLUDE_PATH) $< -o $@  
  46.   
  47. clean:  
  48.     -rm *.o $(SER_NAME)_$(M_DATE)  
  49.   
  50. #可根据实际情况修改  
  51. #install  
  52. #    ....  

 makefile相关知识点疑问解答:

 

1、模式规则示例
下面这个例子表示了,把所有的[.c]文件都编译成[.o]文件.
%.o : %.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
其中,"$@"表示所有的目标的挨个值,"$<"表示了所有依赖目标的挨个值。这些奇怪的变量我们叫"自动化变量",后面会详细
讲述。

2、变量高级用法
这里介绍两种变量的高级使用方法,第一种是变量值的替换。
我们可以替换变量中的共有的部分,其格式是“$(var:a=b)”或是“${var:a=b}”,其意思是,把变量“var”中所有以“a”字
串“结尾”的“a”替换成“b”字串。这里的“结尾”意思是“空格”或是“结束符”。
还是看一个示例吧:
foo := a.o b.o c.o
bar := $(foo:.o=.c)
这个示例中,我们先定义了一个“$(foo)”变量,而第二行的意思是把“$(foo)”中所有以“.o”字串“结尾”全部替换成“.c”,
所以我们的“$(bar)”的值就是“a.c b.c c.c”。
另外一种变量替换的技术是以“静态模式”(参见前面章节)定义的,如:
foo := a.o b.o c.o
bar := $(foo:%.o=%.c)
这依赖于被替换字串中的有相同的模式,模式中必须包含一个“%”字符,这个例子同样让$(bar)变量的值为“a.c b.c c.c”。
第二种高级用法是——“把变量的值再当成变量”。先看一个例子:
x = y
y = z
a := $($(x))
在这个例子中,$(x)的值是“y”,所以$($(x))就是$(y),于是$(a)的值就是“z”。(注意,是“x=y”,而不是“x=$(y)”)
我们还可以使用更多的层次:
x = y
y = z
z = u
a := $($($(x)))
这里的$(a)的值是“u”,相关的推导留给读者自己去做吧。
让我们再复杂一点,使用上“在变量定义中使用变量”的第一个方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值