首先基于上篇文章makefile 的初认识,我们继续学习makefile 新东西(hello.cpp test.h文件和上文类同不在细谈)着重学习makefile,大型工程中存在很多文件夹,他们分别代表不同的功能,因此,我们 需要划分文件功能,讨论一下makefile;文件百度云盘(http://pan.baidu.com/s/1geVQJx5)
mkdir -p test cd test mkdir function touch hello.cpp vi hello.cpp mkdir source touch test.h vi test.h cd .. touch makefile vi makefile上述过程为建立新的文件夹,还是来看一下makefile 里面又出现了什么新知识;
VPATH=./source CC=g++ #vpath %.cpp source #vpath %.h function object=hello.o hello:$(object) $(CC) -o $@ -g $< $(object):hello.cpp $(CC) -o $@ -c $< clean: -rm hello $(object)上述的makefile文件应该位于test文件夹下;
VPATH=./source #vpath %.cpp source #vpath %.h functionVPATH 是makefile的系统路径变量 它用来指明,在make解析makefile时候,发现所需要的源文件在source文件夹下,这是需要VPATH 预先指定路径告诉make的,至于test.h 为什么不需要指定所在的文件夹,这是因为,在hello.cpp 头文件已经定义了路径;
#include"../function/test.h" #include<iostream> using namespace std; int main(int argc,char* argv[]) {cout<<"hello world"<<endl; print(); return 0; }上述的hello.cpp文件的第一句已经指明头文件所在的文件,所以不用再makefile里面在定义test.h 路径了。
“”# “”在makefile 中代表注释的含义VPATH 和vpath 都可以表达指定路径的作用,但是使用方法不同 ,上面已经讲过VPATH= 路径信息 而 vpath 文件名 文件夹 上面的makefile 也可以写成这样的形式
#VPATH=./source CC=g++ vpath %.cpp source object=hello.o hello:$(object) $(CC) -o $@ -g $< $(object):hello.cpp $(CC) -o $@ -c $< clean: -rm hello $(object)新的makefile 中,出现了了两个新的符号 @ 代 表 的 含 义 是 目 标 文 件 S < 代 表 的 含 义 是 源 文 件 比 如 h e l l o . c p p 对 于 h e l l o . o 来 说 就 是 源 文 件 h e l l o . o 对 于 h e l l o . c p p 就 是 目 标 函 数 , h e l l o 和 h e l l o . o 也 是 类 似 的 含 义 , 所 以 可 以 直 接 使 用 @ 代表的含义是目标文件 S< 代表的含义是源文件 比如hello.cpp 对于hello.o 来说 就是源文件 hello.o 对于hello.cpp就是目标函数 ,hello 和hello.o 也是类似的含义,所以可以直接使用 @代表的含义是目标文件S<代表的含义是源文件比如hello.cpp对于hello.o来说就是源文件hello.o对于hello.cpp就是目标函数,hello和hello.o也是类似的含义,所以可以直接使用@ $< 替代命令中的 源文件夹和目标文件
文中cc 也类似object 变量含义,test.h文件内容不变;
#include<iostream> using namespace std; void print() {cout<<"i am a student"<<endl;}test.h文件