文件目录如下:
--------------------- l.c
--------------include
|__ l.h
--------------------- z.c
--------------------- Makefile
其中 l.c include z.c 在同一个目录中,而 z.c 是文件。在include文件夹中有一个l.h文件。
其中 z.c 文件代码如下:
*-*-*-*-*-*-*-*-*-*-*-* z.c 文件如下 *-*-*-*-*-*-*-*-*-*-**-*
#include<stdio.h>
#include"l.h"
int main()
{
hello();
return 0;
}
*-*-*-*-*-*-*-*-*-*-*-*-* l.c 文件如下 *-*-*-*-*-*-*-*-*-*-*-*
#include<stdio.h>*-*-*-*-*-*-*-*-*-*-*-* l.h 文件如下 *-*-*-*-*-*-*-*-*-*-*-*-*-*
#include"l.h"
void hello()
{
printf("I am form l.c file\n");
}
/*************************************************************
* Author : jonathan
* time : 2017,3,10 10:37
* effect : .h file
*************************************************************/
#ifndef _L_H_
#define _L_H_
void hello();
#endif
*-*-*-*-*-*-*-*-*-*-* Makefile 文件如下 *-*-*-*-*-*-*-*-*-*-*-*
#VPATH=include*-*-*-*-*-*-*-*-*-*-* end *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
vpath %.h include
o=l.o z.o
hello:$(o)
gcc -o $@ $(o)
z.o:z.c l.h
gcc -I include -c $<
l.o:l.c l.h
gcc -I include -c $<
.PHONY:clean
clean:
rm *.o
首先其中一些符号
$< 是代表第一个依赖文件的名称
$@ 是代表目标文件的名称
然而第一代码行 #VPATH=include注释了的因为他和紧接着的下面的一行代码是一样的功能用起一即可。
关于Vpath的一些解释,给一个我在研究时一位大佬的解释和具体用法。 -> blog.csdn.net/changli_90/article/details/7881905
*-*其中值得注意的是使用VPATH变量的时候并不能直接自动的搜索文件,所以gcc的时候有 -I include 只有这样才能从include找到相应文件。*-*