zoukankan      html  css  js  c++  java
  • makefile笔记

    一、构建背景知识

    源代码(.c,.cpp)编译生成目标代码(如:.obj,.o),目标代码链接生成可执行代码(.exe,.dll)。

    对目标代码打包生成库文件(如:.lib,.a)

    为了简化构建程序的过程,可以把编译和链接的指令放到一个文件中,这个文件就是makefile文件,

    makefile文件最终要通过一个make工具来解释执行,不同的make工具定义的makefile文件会有不同。

    二、makefile的核心规则:

    target...:dependency...

      command

    解释:

    target:执行command产生的目标

    denpendency:产生target的所有依赖文件

    command:shell指令,在makefile中必须以【tab】字符开始。

    三、makefile中定义变量

    makefile中的变量相当于宏,定义语法为:

    name=value

    name表示变量的名字,value表示变量的值,如:GDAL_ROOT=.

    使用变量的语法为:$(name),如:CPLLIB =    $(GDAL_ROOT)/port/cpl.lib

    四、make工具的自动推导规则(隐式规则)

    make工具有自动推导功能,比如要生成一个a.obj目标文件,make工具自动推导出需要依赖a.cpp文件,因此a.cpp在依赖的位置上可以不写。

    .PHONY:clean //表示clean是个伪目标,要执行伪目标的command,需要在make工具执行的时候,显示地加上伪目标名称这个参数,如:nmake /f makefile.vc clean

    clean:

      -rm a.obj

    五、细节

    1、makefile里有什么?

      makefile里包含5个部分:显式规则,隐式规则,变量定义,文件指示,注释。

      显式规则:就是有makefile的作者显式指出规则的各个部分(目标,依赖,命令);

      隐式规则:这个功能由make工具提供,可以省略某些依赖和命令,交由make工具自动推导。

      变量定义:上面有解释,不说了。

      文件指示:包含三部分:1.一个makefile包含另一个makefile,#include;2.指定makefile中的有效部分,#if;3.定义一个多行的命令

      注释:以字符#开始到行尾的部分为注释

    2、makefile里的通配符:

      ~:表示用户宿主目录,windows下表示%HOME%目录,

      *:表示任意名称的文件如:*.c

      ?:

      [...]:

  • 相关阅读:
    洛谷P3763 [TJOI2017]DNA(后缀数组 RMQ)
    树莓派在身份证件核验领域应用
    Linux suse x86_64 环境上部署Hadoop启动失败原因分析
    用Spring Data JPA 基于内存存储pojo的简单案例
    短信发送AZDG加密算法
    【玩转Ubuntu】09. Ubuntu上安装apktool
    java遍历Map时remove删除元素
    wust 1061 链表的合并
    干货:yii日志功能详解
    xcode解决问题dyld: Library not loaded
  • 原文地址:https://www.cnblogs.com/winson/p/3301590.html
Copyright © 2011-2022 走看看