linux中makefile设置路径的问题

开始接触Makefile已经有好几个月了,最近想好好学习学习ios

可是一个简单的问题就卡壳了很简单的一个问题spring

|-- Makefile
|-- include
|   `-- hello.h
`-- src
    |-- hello.cpp
    `-- main.cp学习

首先是Makefile 文件和include文件夹还有src文件夹在同一个目录下spa

头文件hello.h在include目录下命令行

源文件main.cpp和hello.cpp在src目录下io

////////////////////////////////class

hello.h:test

#ifndef _HELLO_H__stream

#define _HELLO_H__变量

void hello();

#endif

///////////////////////////

hello.cpp:

#include<iostream>

#include"hello.h"

using namespace std;

void hello()

{

        cout<<"Hello world"<<endl;

}

/////////////////////////////

main.cpp:

#include<iostream>

#include"hello.h"

using namespace std;

int main()

{

          hello();

          return 0;

}

/////////////////////////////////

Makfile:

#VPATH=include:src
vpath %.cpp src
vpath %.h include
test:main.o hello.o
g++ -o $@ main.o hello.o
main.o:main.cpp hello.h
g++ -c $< -Iinclude
hello.o:hello.cpp hello.h
g++ -c $< -Iinclude
.PHONY:clean
clean:
-rm test hello.o

//////////////////////////////////

由于Makefile、hello.h hello.cpp main.cpp没有在同一个路径,因此要考虑路径的问题

同时,路径也有两种,一种是针对Makefile来讲在执行make命令的时候,要寻找目标文件和依赖文件的路径

另外一个就是源文件所要包含的头文件等相关文件的路径。

对于第一种来讲,Makefile 提供了两种方式,一种是设置全局访问路径VAPTH:即在执行make命令时能够从该路径中查询目标和依赖make可识别一个特殊变量“VPATH”。经过变量“VPATH”能够指定依赖文件的搜索路径,
在规则的依赖文件在当前目录不存在时,make会在此变量所指定的目录下去寻找这些依赖文件。
通常咱们都是用此变量来讲明规则中的依赖文件的搜索路径。其实“VPATH”变量所指定的是
首先说明一下makefile的执行步骤:

一、读入全部的Makefile。
二、读入被include的其它Makefile。
三、初始化文件中的变量。
四、推导隐晦规则,并分析全部规则。
五、为全部的目标文件建立依赖关系链。
六、根据依赖关系,决定哪些目标要从新生成。
七、执行生成命令

Makefile中全部文件的搜索路径,包括依赖文件和目标文件。 
变量“VPATH”的定义中,使用空格或者冒号(:)将多个目录分开。make 搜索的目录顺序
按照变量“VPATH”定义中顺序进行(当前目录永远是第一搜索目录)。

例如:

VPATH = src:../headers

它指定了两个搜索目录,“src”和“../headers”。对于规则“foo:foo.c”若是“foo.c”在“src”
目录下,此时此规则等价于“foo:src:/foo.c”

对于第二种来讲:当须要为不类型的文件指定
不一样的搜索目录时须要这种方式

vpath:关键字

它所实现的功能和上一小节提到的“VPATH”变量很相似,可是
它更为灵活。它能够为不一样类型的文件(由文件名区分)指定不一样的搜索目录。它的使用方法有三

一、vpath PATTERN DIRECTORIES 
为符合模式“PATTERN”的文件指定搜索目录“DIRECTORIES”。多个目录使用空格或者
冒号(:)分开。相似上一小节的“VPATH” 
二、vpath PATTERN 
清除以前为符合模式“PATTERN”的文件设置的搜索路径

三、vpath

清除全部已被设置的文件搜索路径。

对于vpath的详细说明待续。

在执行make命令的时候,根据makefile执行步骤,首先读入全部的makefile文件,那么

VPATH = include:src       //指定了makefile的搜索路径

或者

vpath %.h include    //指定.h类型文件的搜索路径是include

vpath %.cpp src      //指定.cpp类型文件的搜索路径是src

这仅仅是对于makefile来讲搜索目标和依赖文件的路径,可是对于命令行来讲是无效的,也就是说

在执行g++或者gcc时不会自动从VPATH 或者vpath中自动搜索要包含的头文件等信息文件

此时要用到了 -I 或者--incude +路径

例如依赖是:

main.o:main.cpp hello.h

即g++ -c $< -Iinclude,这时候,g++会自动从include目录中搜索要包含的hello.h头文件     spring  123@123.com

相关文章
相关标签/搜索