我们可以看到仍然出错了,这是因为虽然make可以找到a.c和b.c的位置,但是在执行编译命令的时候我们执行的依然是gcc -c a.c,这条命令是会在当前目录下去寻找a.c的,而不会在其他路径下去寻找a.c,在这里我们可以使用$<去解决这个问题,$<表示第一个依赖的文件。 修改之后的makefile文件如下所示: cflags=-c VPA...
vpath指令可以在指定的目录下面找特定的文件,比如我要找在某个文件夹下面所有的.c文件,指令如下: vpath %.c E:/c10_Workspace/complier_demo 这就表示需要的时候,make就会在E:/c10_Workspace/complier_demo找,看有没有make需要的.c文件,%.c 表示所有后缀名为.c的文件 利用vpath指令,我们就可以继续简化makefil...
VPATH 和 vpath 只是在 make 寻找文件的依赖关系时才有作用,而gcc -c main.c是你定义的规则所执行的命令,会原封不动地执行,该命令的意思是在当前文件夹下编译 main.c 文件,由于没有找到 main.c ,故出现上述错误。 使用make -n可以查看具体执行的命令: gcc -c main.c gcc -c sub.c gcc -o test main...
vpath只对Makefile中的依赖查找有效: 比如: main.o: test.h 这里的test.h在vpath指定的路径中,make根据vpath去寻找依赖规则 然后-I 指明了gcc 编译时test.h 查找路径 添加头文件-I(常用) 例如在/home/work/include/目录下有编译foo.c所需头文件def.h,为了让GCC能找到它们,就需要使用-I选项: $ gcc foo....
vpath test.c 用法二的意思是清除符合文件 test.c 的搜索目录。 最后是用法三,命令格式如下: vpath vpath 单独使的意思是清除所有已被设置的文件搜索路径。 另外在使用 vpath 的时候,搜索的条件中可以包含模式字符“%”,这个符号的作用是匹配一个或者是多个字符,例如“%.c”表示搜索路径下所有的 .c 结尾的文件...
首先先在当前路径下创建makefile和src,inc这三个文件夹。并且在src中存放.c文件在inc中存放.h文件。 makefile: 这里使用VPATH指定了头文件和源文件的查找路径,那么为什么还需要使用-I选项来指定inc路径呢? 需要注意的是,在使用 VPATH 变量时,一般都需要通过 -I 选项来指定头文件的查找路径,这样才能让编译器正确...
gcc -c xyz.c -o xyz.o -g .PHONY:clean clean: rm main main.o abc.o xyz.o -f 3. Makefile书写规则 规则包含两个部分,一个是==依赖关系==,一个是==生成目标的方法==。 在Makefile中,规则的顺序是很重要的,因为,**==Makefile中只应该有一个最终目标==,其它的目标都是被这个目标所连带出来...
VPATH 和 vpath 只是在 make 寻找文件的依赖关系时才有作用,而 gcc -c main.c 是你定义的规则所执行的命令,会原封不动地执行,该命令的意思是在当前文件夹下编译 main.c 文件,由于没有找到 main.c ,故出现上述错误。 使用 make -n 可以查看具体执行的命令:第二版 Makefile 如下...
Makefile文件中的特殊变量“VPATH”就是完成这个功能的,如果没有指明这个变量,make只会在当前的目录中去找寻依赖文件和目标文件。如果定义了这个变量,那么,make就会在当当前目录找不到的情况下,到所指定的目录中去找寻文件了。 VPATH = src:../headers
通过设置VPATH变量,我们告诉make命令在依赖文件时应该在这两个目录中查找。 在规则中,我们使用了VPATH变量来指定依赖文件的路径。例如,$(OBJS)依赖于$(SRCS)中的所有源文件,我们使用了模式规则来将.c文件转换为.o文件,并在其中使用了VPATH变量。 通过这种方式,我们可以将源文件和依赖文件分开存放,提高代码的可维护...