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

      ?:

      [...]:

  • 相关阅读:
    所有HTTP返回状态值,并说明用途
    几个简单的排序算法
    Linux命令大全
    存储过程中执行动态Sql语句
    IE8的背景不显示和图片错位 解决方案
    海量数据处理方法
    关于MSSQL的返回值问题
    SQL Server 2008不能修改表的解决方法
    转:读AD里特殊的属性in C#
    了解SMS的主要特性。
  • 原文地址:https://www.cnblogs.com/winson/p/3301590.html
Copyright © 2011-2022 走看看