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
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM