zoukankan      html  css  js  c++  java
  • 【ASM C/C++】 Makefile 规则说明

    make 命令会自动读取当前目录下的 Makefile 文件[31],完成相应的编译步骤。Makefile 由一组规则(Rule)组成,每条规则的格式是:
    target ... : prerequisites ...

       command1

      command2

      ...

    目标和条件之间的关系是:欲更新目标,必须 首先更新它的所有条件;所有条件中只要有一个条件被更新了,目标也必须随 之被更新。所谓“更新”就是执行一遍规则中的命令列表,命令列表中的每条 命令必须以一个 Tab 开头,注意不能是空格,Makefile 的格式不像 C 语言的缩 进那么随意,对于 Makefile 中的每个以 Tab 开头的命令,make 会创建一个 Shell 进程去执行它。

    • 目标没有生成。

    • 某个条件需要更新。

    • 某个条件的修改时间比目标晚。

    clean 目标是一个约定俗成的名字,在所有软件项目的 Makefile 中都表示清 除编译生成的文件,类似这样的约定俗成的目标名字有: • all,执行主要的编译工作,通常用作缺省目标。 • install,执行编译后的安装工作,把可执行文件、配置文件、文档等 分别拷到不同的安装目录。 • clean,删除编译生成的二进制文件。 • distclean,不仅删除编译生成的二进制文件,也删除其它生成的文 件,例如配置文件和格式转换后的文档,执行 make distclean 之后 应该清除所有这些文件,只留下源文件。 

    变量:

    #定义变量
    PROJECT = test_projet
    #变量追加值
    PROJECT += $(AUTHOR)
    #立即展开的变量
    AUTHOR := A Been

    • $@,表示规则中的目标。

    • $<,表示规则中的第一个条件。

    • $?,表示规则中所有比目标新的条件,组成一个列表,以空格分隔。

    • $^,表示规则中的所有条件,组成一个列表,以空格分隔。


    示例:
    all: main

    main: test.c
    gcc test.c

    clean:
    @echo cleanning $(PROJECT) project
    -rm *.out
    @echo clean completed

    install:
    @echo install project
    @echo install completed


    .PHONY: clean

    #定义变量
    PROJECT = test_projet
    #变量追加值
    PROJECT += $(AUTHOR)
    #立即展开的变量
    AUTHOR := A Been

  • 相关阅读:
    利用Node.js的Net模块实现一个命令行多人聊天室
    JS判断鼠标进入容器方向的方法和分析window.open新窗口被拦截的问题
    Node.js:进程、子进程与cluster多核处理模块
    Node.js:理解stream
    Node.js:Buffer浅谈
    Node.js:OS模块
    一个unsigned int 数的二进制表示中有多少个1
    一个栈的入栈序列为ABCDEF,则不可能的出栈序列是
    文件操作:获取一个文件行数的方法
    利用sourceinsight宏(Quicker.em)提高编码效率和质量
  • 原文地址:https://www.cnblogs.com/abeen/p/4381248.html
Copyright © 2011-2022 走看看