19、makefile VPTAH vpath $@ $<

    xiaoxiao2021-04-18  47

    首先基于上篇文章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 function

    VPATH 是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.cpphello.ohello.ohello.cpphellohello.o使@ $< 替代命令中的 源文件夹和目标文件

    文中cc 也类似object 变量含义,test.h文件内容不变;

    #include<iostream> using namespace std; void print() {cout<<"i am a student"<<endl;}

    test.h文件

    转载请注明原文地址: https://ju.6miu.com/read-674514.html

    最新回复(0)