Makefile中的$(addprefix),添加前缀,指定目标生成目录

摘要:
命令ls后面两个的路径的前面都被添加了-I,和你想像的一样,该addprefix就是用于添加前缀的,格为:$其中,fixstring表示任意要添加的固定前缀,在逗号的后面可以是一个或多个要添加前缀的子字符串,多个子字符串之间用空格隔开,当然,你也可以像前面的例子一样用变量。再举个例子:INC=-I../includeLIB=-L../lib-lsqlite3CFLAGS=-lgcc-pthread-ldlDIR_OBJS=../objDIR_BIN=../bindirs:=$$bin=serversrc=$obj=$#patsubst模式字符替换函数#obj=$obj:=$bin:=$#$@目标#$^依赖all:$$$:mkdir$@$:$gcc$^-o$@$$$$/%.o:%.cgcc$^-o$@-c$$$clean:rm-rf$$.PHONY:allclean

先给大家看段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

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

Makefile中的$(addprefix),添加前缀,指定目标生成目录第1张

看到了吗?命令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

免责声明:文章转载自《Makefile中的$(addprefix),添加前缀,指定目标生成目录》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇delphi的构造函数和析构函数ArcGIS AddIn开发笔记(一)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linux_samba服务搭建

什么是samba服务?       用于Windows和linux系统之间实现共享文件的目的服务 如何配置其服务?       Linux端: 搭建服务   1. 安装samba yum install -y samba   2. 配置个人网盘服务(这里还有配置大家都可以访问的网盘内容,叫公有,后说)     # 不需要修改任何配置      a. 添加登...

linux(centos8):安装分布式事务服务seata(file单机模式,seata 1.3.0/centos 8.2)

一,什么是seata? Seata:Simpe Extensible Autonomous Transcaction Architecture, 是阿里中间件,开源的分布式事务解决方案。 前身是阿里的Fescar 官方站: http://seata.io/zh-cn/ 官方代码地址: https://github.com/seata/seata 官方文档...

linux编程lib的使用

今天由于要用到静态链接库,所以就学习了一下相关知识,总结如下:静态链接库(一般命名为libxxx.a)就是很多.o文件的集合,在你的项目中如果有一个子模快,这个子模块只是给总控模块提供一个函数接口,那么你就可以考虑把这个子模快编译成静态链接库libxxx.a,然后在总控模块中编译的时候,只需-L包含链接库所在的目录,再-lxxx引用链接库就行.当然,你也可...

Linux远程管理器xshell和xftp使用教程,以及遇到关闭Xshell后项目也停止的解决方法

1.xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。 2.是一个基于 MS windows 平台的功能强大的SFTP、FTP 文件传输软件。 两个软件的使用方法图解网址吧:http://www.xker.com/page/e2014/0707/132788.html...

ubuntu安装python3.6

ubuntu16.04自带python2.7和python3.5, 若需安装python 3.6: 先是sudo apt-install python3.6,报错:找不到python3.6安装包。 Reading package lists... Done Building dependency tree Reading state info...

Makefile 使用总结

1. Makefile 简介 Makefile 是和 make 命令一起配合使用的. 很多大型项目的编译都是通过 Makefile 来组织的, 如果没有 Makefile, 那很多项目中各种库和代码之间的依赖关系不知会多复杂. Makefile的组织流程的能力如此之强, 不仅可以用来编译项目, 还可以用来组织我们平时的一些日常操作. 这个需要大家发挥自己的...