zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    Vue(小案例_vue+axios仿手机app)_go实现退回上一个路由
    nyoj 635 Oh, my goddess
    nyoj 587 blockhouses
    nyoj 483 Nightmare
    nyoj 592 spiral grid
    nyoj 927 The partial sum problem
    nyoj 523 亡命逃窜
    nyoj 929 密码宝盒
    nyoj 999 师傅又被妖怪抓走了
    nyoj 293 Sticks
  • 原文地址:https://www.cnblogs.com/xin-lover/p/8934158.html
Copyright © 2011-2022 走看看