执行shell命令赋值给变量 A = $(shell uname) 文件包含:include 注释: “#” 特殊变量: 三、Makefile 工作常用点补充 搜索路径 VPATH 变量 VPATH = . /lib vpath关键字(vpath<pattern> <directories> vpath %.h ../inc) vpath %.c ./src : . vpath %.c # 取消该模式 vpath # 取消所有模式 VPATH 和 vpath 定义的搜索路径仅对 makefile 规则有效,对 gcc/g++ 命令行无效,比如不能用它定义命令行头文件搜索路径参数
第二步:通过autoconf将Makefile中定义为@VARIABLE@的变量替换,并通过VPATH进行远程构建。 第三步:借助autoscan生成configure.ac,并说明文件中的宏含义。 = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ # VPATH-specific substitution variables srcdir = @srcdir@ VPATH = @srcdir@ 现在可以执行autoreconf,然后执行configure和make,以构建项目。 其中,VPATH构建是一种使用Makefile结构(VPATH)在源目录以外的目录中配置和构建项目的方法,详细介绍见:Makefile目标文件搜索(VPATH和vpath) VPATH构建,思考下,很容易明白 make 刚生成的makefile文件,由于其中已经定义了VPATH变量。所以很自然的根据VPATH,找到依赖的源码位置,编译出来的内容在当前目录。从而实现,在非源码目录编译project。
5.vpath 自动变量的使用,第一个参数是查找的类型,第二个是查找的目录 vpath %.c src #查找依赖时如果遇到%.c,则自动到src目录下寻找 D_SRC = src D_INC = -I $@.$$$$ include $(SRC_MK) .PHONY: clean clean: rm -f $(D_OBJ)/* $(TATGET) $(D_MK)/* 查找多个目录用下面的写法 vpath %.c src:src1:src2 大写VPATH只能指定依赖的查找目录,不能指定类型,所以也可以写成 VPATH = src D_SRC = src D_INC = -I. TATGET):$(OBJ_C) gcc -o $@ $^ $(D_OBJ)/%.o:%.c gcc -c -Wall $(D_INC) $< -o $@ $(D_MK)/%.d:%.c #自动去VPATH 指定的目录查找,指定多个路径 写成VPATH = src:src1:src2 @set -e; rm -f $@; \ $(CC) -MM $(D_INC) $< > $@.$$$$; \ sed
1、我们可以通过VPATH变量来解决,2、我们可以通过vpath指令来解决。 VPATH变量 VPATH变量为所有的prerequisites指定文件路径,路径之间可以通过 :或空格隔开,比如 VPATH = src:.. /headers vpath指令 vpath指令的作用与变量VPATH的作用差不多,但vpath有更多的灵活性,其语法为: vpath pattern directories pattern 为需要查找的文件匹配模式信息,directories为要查找的文件路径,比如 vpath %.h .. %.c $(C_DIRS) vpath %.S $(S_DIRS) $(OUT_DIR)/%.o:%.c (CC) (COMPILE_FLAGS) -MMD -MP -MF”(@:%.o=%.d)”
,~ make可以在别的文件夹下寻找文件: VPATH=src:.. /headers 如果make没有在当前文件夹下找到文件,就回去VPATH的路径下寻找文件,另一种方法是使用更为灵活的vpath: vpath <pattern> <directories># 为符合模式的文件指定搜索目录 vpath <pattern># 清除符合模式的文件的搜索目录vpath# 清除所有已被设置好的文件搜索目录 pattern需要包含%,表示匹配0/若干字符,例如: vpath %.h ..
上述示例转换成 makefile CC=g++ CFLAGS=-Wall hello:hello.o hello_fn.o clean: rm -f hello hello.o hello_fn.o 使用 VPATH CC = g++ OBJ = main_fn.o main.o CFLAGS = -I include vpath %.cpp src vpath %.h include CC) -o $@ $(OBJ) %.o:%.cpp $(CC) $(CFLAGS) -c $< .PHONY:clean clean: -rm -f main $(OBJ) 其中,vpath
、 ~’三个通配符文件搜寻示例VPATH = src:../headersvpath %.h .. /headers可以使用特殊变量 VPATH或vpath关键字来设置搜索目录多目标与静态模式比较复杂,还需要复习自动生成依赖性通过recipe自动生成文件的依赖关系,依赖关系放到对应的.d文件中
EXIT_SUCCESS : EXIT_FAILURE; } makefile文件 vpath %.h include #vpath 指定搜索路径 vpath %.c add vpath
(3)预定义变量VPATH指明目标的依赖项所在目录 VPATH= src:./include:./src/xmlparser:. VPATH+=dir1:dir2:... 7.3VPATH与vpath的区别 vpath是Makefile的关键字,VPATH是Makefile的特殊变量,两者的区别在于VPATH指定全局的搜索路径,而vpath可以针对特定的文件搜索路径。 vpath命令有三种形式: vpath pattern path : 符合pattern的文件在path目录搜索。 vpath pattern : 清除pattern指定的文件搜索路径 vpath : 清除所有文件搜索路径。 例如: vpath %.h .
make定义了一个叫VPATH的变量,在当前目录中搜索不到依赖文件时,便到VPATH定义的目录中去寻找。 也可用关键字vpath 定义搜索位置: vpath <pattern> <directories> vpath :清除所有已被设置好的文件搜索目录。 如:vpath %.h ..
body>
/outs OUTSDIR = outs #定义.o中间文件的路径,这个路径编译完成可以清除 TMPSDIR = objs #源代码路径 VPATH=src #扫描所有的c源码,这里默认src中所有文件都是相当于库文件 main DEPS = $(addprefix $(TMPSDIR)/,$(OBJS)) .PHONY : all all:$(OBJS) $(KEYS) #编译所有的库文件由.c至.o #因为VPATH isysroot $(_SFLAG) -arch arm64 -mios-version-min=9.3 -fembed-bitcode OUTSDIR = outs TMPSDIR = objs VPATH
两种方法: VPATH (变量) VPATH = src:../inc 如上,指定了 ./src 和 .. vpath (关键字) 注意:这不是一个变量,按照使用方式可以多次调用设定文件的搜索模式。 vpath 使用的三种方法 1、vpath <pattern> <directories> 为符合模式<pattern>的文件指定搜索目录<directories>。 2、vpath <pattern> 清除符合模式<pattern>的文件的搜索目录。 3、vpath 清除所有已被设置好了的文件搜索目录。 vpath %.c dir1 # 在 dir1 寻找 .c 文件 vpath % dir2 # 在 dir2 寻找 任何需要的文件 vpaht %.c dir3 # 同 1 # 当前目录找不到的情况下
文章目录 make简介 makefile基本结构 makefile的基本使用实例 makefile变量 make的使用 makefile的隐含规则 makefile的VPATH makefile的嵌套 makefile的VPATH VPATH:虚路径 在一些大的工程中,有大量的源文件,我们通常的做法是把许多的源文件分类,并且存放在不同的目录下。 makefile文件中的特殊变量VPATH就是完成这么一个功能,如果没有指明这个变量,make只会在当前目录中去寻找依赖文件和目标文件。 VPATH = src:../headers 上面的定义指定两个目录,‘src’和‘…/headers’,make会按照这个顺序进行搜索。目录由‘冒号’分割。 利用VPATH进行优化makefile: CFLAGS=-c -Wall -I include VPATH=src1 src2 main f1:src1/f1.o src2/f2.o main/main.o
Makefile中有个特殊的变量 VPATH 就是完成这个功能的. 指定了 VPATH 之后, 如果当前目录中没有找到相应文件或依赖的文件, Makefile 回到 VPATH 指定的路径中再去查找.. VPATH 使用方法: vpath <directories> :: 当前目录中找不到文件时, 就从<directories>中搜索 vpath <pattern> <directories /parent-dir目录中查找文件 VPATH src:../parent-dir # 示例2 - .h结尾的文件都从 ./header 目录中查找 VPATH %.h . /header # 示例3 - 清除示例2中设置的规则 VPATH %.h # 示例4 - 清除所有VPATH的设置 VPATH 2.2 Makefile 中的变量 2.2.1 变量定义 ( = or
= '\\') { Directoryname.append(1, '\\'); } std::vector< std::string> vpath; std = '\\') { strtemp.append(1, Directoryname[i]); } else { vpath.push_back strtemp); strtemp.append(1, '\\'); } } std::vector< std::string>::iterator vIter = vpath.begin = vpath.end(); vIter++) { bSuccess = CreateDirectoryA(vIter->c_str(), NULL) ?
实现原理 调用vs安装自动组件WebDev.WebServer20.EXE完成的,调用命令:WebDev.WebServer20.EXE /port:端口号 /path:"文件物理路径" /vpath: 主要系统调用组件主题代码(批处理) @echo off set /p myport=请输入端口号: start %~sdp0WebDev.WebServer20.EXE /port:%myport% /path:%1 /vpath
LD_LIBS := #-lsrcpbl -lmysqlclient XLD_FLG := -Xlinker "-(" $(LDFLAGS) -Xlinker "-)" # Add vpath . vpath %.h $(sort $(dir $(SRC_H))) vpath %.c $(sort $(dir $(CUR_C))) vpath %.cpp $(sort $(dir $(CUR_CPP
LD_LIBS := #-lsrcpbl -lmysqlclient XLD_FLG := -Xlinker "-(" $(LDFLAGS) -Xlinker "-)" # Add vpath . vpath %.h $(sort $(dir $(SRC_H))) vpath %.c $(sort $(dir $(CUR_C))) vpath %.cpp $(sort $(dir $(CUR_CPP
= /usr/local/cuda-5.5 #environment variable VPATH VPATH=.