zoukankan      html  css  js  c++  java
  • Makefile中的$(addprefix),添加前缀,指定目标生成目录

    先给大家看段Makefile的代码吧:

    INCLUDE_DIR=usr/java/jdk1.8.0_25/include 
        usr/java/jdk1.8.0_25/include/linux
    INCLUDE_FLAG=$(addprefix -I,${INCLUDE_DIR})
    
    all:
        ls ${INCLUDE_FLAG}

    假如我们在命令行执行下面的命令: make

    此时,我们将会看到这样的输出:

     看到了吗?命令ls后面两个的路径的前面都被添加了-I,和你想像的一样,该addprefix就是用于添加前缀的,格为:

    $(addprefix fixstring,string1 string2 ...)

    其中,fixstring表示任意要添加的固定前缀,在逗号的后面可以是一个或多个要添加前缀的子字符串,多个子字符串之间用空格隔开,当然,你也可以像前面的例子一样用变量。

    再举个例子:

    INC = -I../include
    LIB = -L../lib -lsqlite3
    CFLAGS = -lgcc -pthread -ldl
    DIR_OBJS = ../obj
    DIR_BIN = ../bin
     
    dirs := $(DIR_OBJS) $(DIR_BIN) 
    bin = server
    src = $(wildcard *.c) 
    obj = $(patsubst %.c,%.o,$(src))  #patsubst模式字符替换函数 #obj = $(src:.c=.o)
     
    obj := $(addprefix $(DIR_OBJS)/,$(obj))
    bin := $(addprefix $(DIR_BIN)/,$(bin))
     
    #$@ 目标(自动变量)
    #$^ 依赖
    all: $(dirs) $(bin)
     
    $(dirs):
        mkdir $@
     
    $(bin):$(obj)
        gcc $^ -o $@ $(CFLAGS) $(INC) $(LIB)
     
    $(DIR_OBJS)/%.o:%.c
        gcc $^ -o $@ -c $(CFLAGS) $(INC) $(LIB)
     
    clean:
        rm -rf $(dirs) $(bin)
     
    .PHONY:all clean
     
  • 相关阅读:
    commons-logging.jar 和 log4j.jar 的关系
    百钱买百鸡
    reflect
    golang结构体、接口、反射
    golang文件操作
    sqlx使用说明
    go example
    goroutine
    生成二维码
    method&interface
  • 原文地址:https://www.cnblogs.com/renzmin/p/12095425.html
Copyright © 2011-2022 走看看