• C++学习笔记24:makefile文件


    makefile

    make命令:负责c/c++程序编译与链接

    • make根据指定命令进行建构
    • 建构规则文件:GNUmakefile , makefile,Makefile

    makefile 文件格式

    makefile 语法

    --基本语法,变量,条件判断,循环,函数

    makefile 文件的基本格式

    target...:prerequisites...

    [tab键]  commands

     makefile文件的规则

    • makefile 文件由一系列规则构成
    • 规则目的:建构目标的先决条件是什么以及如何构建目标
    • 如果没有指定目标,缺省执行第一个目标
    • 若prerequisites中有一个以上的文件比target文件要新,执行commands所定义的命令

    target:目标

    • 通常为编译期的文件名,以指定要建构的对象,也可以是执行文件,还可以是标签(操作名称,伪目标)
    • 可以是单一目标,也可以为空格分隔的多个目标
    • 每个目标都定义了一组处理规则,和其相关规则构成规则链

    prerequisites:先决条件

    • 为生成该目标所需要的先决文件或者目标(前置条件)
    • 一般为空格分隔的文件名,指定目标是否重建的判断标准,即只要有一个先决条件不存在或者有过更新,就需要重建目标

    prerequisites:先决条件

    若目标先决条件本身需要重建,则匹配该先决条件的目标,执行其对应的命令

    commands:命令

    由一行或者多行shell命令组成,命令前有Tab键

    指示如何建构目标,一般为生成目标文件

    每行命令都在单独的进程中执行,彼此没有继承关系,不能简单传递数据;解决办法是:用分号将多条命令书写在单行(此时可用“”折行),或者为该条规则添加指示“.ONESHELL:”

    伪目标:操作名称,而不是文件名

    • 删除编译后的二进制目标文件,例如:

    clean:

        rm -f *.o

    执行命令时需指定伪目标:$make clean

    若当前目录下有clean文件,则此规则不会被执行;此时可用“.PHONY:clean”明确指示clean为伪目标;

    make将跳过文件检查,执行其对应的命令

    执行清除任务的伪目标一般放在脚本的最后

    伪目标惯例

    • all:所有目标的目标,一般为编译后所有的目标,对同时编译多个程序很有用
    • clean:删除由make创建的文件
    • install:安装已编译好的程序,主要任务是完成目标文件的拷贝
    • print:列出改变过的源文件
    • tar:打包备份源文件,形成tar文件
    • dist:创建压缩文件,一般将tar文件压缩成Z文件或者gz文件
    • TAGS:更新所有的目标,以备完整地重新编译使用
    • check和test:一般用来测试makefile的流程

    例子:假设程序主文件为:main.c,使用library库

    #注释行

    prog:main.o library.o

      cc -o prog main.o library.o

    main.o: main.c library.h

      cc -c main.c

    library.o:library.c library.h

      cc -c library.c

    .PHONY:clean

    clean:

      rm main.o library.o

    接下里:make(生成prog)

        make clean 

    怕什么真理无穷,进一寸有一寸的欢喜。---胡适
  • 相关阅读:
    golang mod 导包
    grpc client 报错: code = Unimplemented desc = method *** not implemented
    golang读取email
    docker 使用
    在word中批量更改Mathtype公式的格式
    word中插入myth type公式行距变大的问题
    word中编辑论文公式对齐问题
    向别人学习
    机器学习 博文汇总
    matlab中如何用rand产生相同的随机数
  • 原文地址:https://www.cnblogs.com/hujianglang/p/6235342.html
Copyright © 2020-2023  润新知