• 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
     
  • 相关阅读:
    HDU1251统计难题map+输入
    HDU1863畅通工程
    POJ2253 Frogger
    HDU 4725 (The Shortest Path in Nya Graph)层次网络
    hdu5521(Meeting)spfa 层次网络最短路
    Fire Net ZOJ 1002
    POJ3259(Wormholes) 判断负环
    POJ3268(Silver Cow Party)
    棋盘问题 POJ 1321
    POJ 1661 (Help Jimmy )
  • 原文地址:https://www.cnblogs.com/renzmin/p/12095425.html
Copyright © 2020-2023  润新知