• makefile vpath变量


    在讲vpath之前,我们首先了解以下makefile文件。

    在类Unix系统中,当我们使用源码编译某个软件的时候,我们会使用confiure,make,make install这三个命令,其中cofigure生成makefile文件,make和make install编译和安装。makefile可以理解为一个脚本文件,使用make命令工具解析,其中定义了一系列的编译规则,如哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译。

    那为什么会需要makefile了?

    这主要因为编译这项工作随着工程的增大而变得异常的复杂和繁琐,设想如果每一次编译我们都要输入十多条甚至上百条的命令,开发效率将变得多么的低效。而使用makefile,你只需要在makefile中编写好编译规则,而之后的编译工作就只需要输入一个“make”的命令,操作系统就帮我们自动的编译整个工程。

    在makefile中有一个vpath的关键字,它用于定义make的查找路径。

    make的查找路径默认为当前路径,而在我们的工程中通常会把原文件放置于不同的目录下,这个使用如果要引用某个文件,我们就需要连同文件的目录一块给出,但这就很不方便,比如我们把某个文件移动到了其他的目录下,我们就需要去修改makefile。而vpath可以很好的解决这个问题。

    首先介绍vpath的用法

    1.vpath <pattern> <directories>

    为符合pattern的文件指定directories的搜索路径

    2.vpath <pattern>

    清除符合pattern文件的搜索路径;

    3.vpath

    清除所有已设置好的搜索路径。

    如: vpath %.h include 表示添加头文件的搜索路径include。其中%表示匹配零个或多个字符。

    但有个要注意的地方是:引用文件时使用$<的自动化变量,如我们要编译一个bird.o的文件,定义

    vpath %.h include
    
    bird.o:bird.cpp bird.h
        g++ -c bird.cpp
    

     bird.h和bird.cpp都在include目录下,这个时候编译时通不过的,而如果把这个改成

    vpath %.h include
    
    mesh.o:mesh.cpp mesh.h 
        g++ -c $<

    则可以通过。原因应该是makefile自动化推导的时候会把mesh.cpp比那成./include/bird.cpp,而直接制定bird.cpp则会在当前目录找,结果找不到,编译失败。

    makefile还有一个VPAH的变量,也是指定搜索路径的,只不过不能像vpath那样指定文件的匹配模式,这在大型的工程中查找指定文件会比较费时。用法:

    VPATH=include:src

    多个路径集间用冒号“:”分隔。

  • 相关阅读:
    php单例模式
    php编码规范
    mysql_affected_rows的注意点
    ThinkPHP的sql_mode的默认设置,导致无效信息被插入
    InnoDB事务和锁
    php中const和static的区别和联系
    php 位运算符的实际应用(权限判断)
    使用LBS(地理位置)
    OkHttpClient简单封装
    Gson解析json
  • 原文地址:https://www.cnblogs.com/xin-lover/p/8934158.html
Copyright © 2020-2023  润新知