• .phony是表示目标是伪目标,并不生成相应的文件。.phony标志的文件总是执行的。

1. 短横(-)与@

  • @(常用在 echo 之前):make 在执行编译打包等命令前会在命令行输出此命令,称之为回显,如果要执行的命令前以字符@开始,则不会回显该条命令,

    echo XXX...# 执行该条命令时,将输出:echo XXX...
    XXX...# 不仅会输出echo要输出的信息(XXX...),还会输出echo这一命令信息@echo XXX...# 执行命令时,将输出:XXX...# 不会输出echo命令
  • -短横(用在 clean 目标, rm 命令前),忽略本条命令的执行成功与否,会继续执行后续命令,类似于 try catch finally 的 finally 代码段

    clean:rm *.orm *.a
    如果 rm *.o 命令发生错误,rm *.a 将不会被执行,
    
    clean:-rm *.o
        -rm *.a

    不论 -rm .o,是否执行成功,-rm .a 都会被执行;

2. 特殊符号

  • $@, $^, $<

    • $@ 代表目标
    • $^ 代表所有的依赖对象
    • $< 代表第一个依赖对象
  • =/:=/+=

    • +=:变量的值的尾部增加内容
    foo = abc
    foo += efg# foo 的值就是 abc efg
    • :=:立即生效;=:变量被引用时递归生效;
    bar=456
    foo=${bar}
    bar=${xxx}
    xxx=123all:echo ${foo}          # 递归生效,echo 显示的内容为123
    bar=456
    foo:=${bar}
    bar=${xxx}
    xxx=123all:echo ${foo}# 立即生效,echo 显示的内容为 456

3. all

all : hello anotherhello : hello.cppg++ -o $@ $<another : another.cppg++ -o $@ $<
  • make hello 的话只编译 hello.cpp
  • make another 的话只编译 another.cpp
  • 直接 make 或 make all 的话会执行 hello.cpp 和 another.cpp 的编译命令
  • 后面不加参数的话,会把第一个目标作为默认的(因此,make 等价于 make all,因为 all 为第一个目标)

makefile 使用 Tricks相关推荐

  1. Fedora12 编译s3c2416 U-Boot1.3.4的Makefile和头文件

    复制Makefile到./ 和smdk2416.h到include/configs 执行: $ make distclean $ make smdk2416_config $make /** (C) ...

  2. uboot makefile分析

    var=$(shell pwd) var1=`pwd` all:echo $(var1) # 这2种写法一样的 echo $(var) # # (C) Copyright 2000-2008 # Wo ...

  3. 浅显易懂 Makefile 入门 (12)— Makefile 常见的错误信息

    1. 常见的错误信息 make 执行过程中所产生错误并不都是致命的,特别是在命令行之前存在 -.或者 make 使用 -k 选项执行时. make 执行过程的致命错误都带有前缀字符串 ***.错误信息 ...

  4. 浅显易懂 Makefile 入门 (10)— 嵌套执行 make、export 的使用

    1. 嵌套执行 make 在一个大的工程文件中,不同的文件按照功能被划分到不同的模块中,每个模块可能都会有自己的编译顺序和规则,如果在一个 Makefile 文件中描述所有模块的编译规则,就会很乱,执 ...

  5. 浅显易懂 Makefile 入门 (09)— include 文件包含、MAKECMDGOALS

    1. include文件包含 当 make 读取到 include 关键字的时候,会暂停读取当前的 Makefile,而是去读 include 包含的文件,读取结束后再继读取当前的 Makefile ...

  6. 浅显易懂 Makefile 入门 (08)— 默认 shell (/bin/sh)、命令回显、make参数(-n 只显示命令但不执行,-s 禁止所有回显)、单行命令、多行命令、并发执行

    1. shell 相关 1.1 默认 shell Makefile 所使用的命令是由 shell 命令行组成,他们是一条一条执行的. 多个命令之间要使用分号隔开,Makefile 中的任何命令都要以 ...

  7. 浅显易懂 Makefile 入门 (07)— 其它函数(foreach 、if、call、origin )

    1. foreach 函数 foreach 函数定义如下: $(foreach <var>,<list>,<text>) 函数的功能是:把参数 <list&g ...

  8. 浅显易懂 Makefile 入门 (06)— 文件名操作函数(dir、notdir、suffix、basename、addsuffix、addperfix、join、wildcard)

    编写 Makefile 的时候,很多情况下需要对文件名进行操作.例如获取文件的路径,去除文件的路径,取出文件前缀或后缀等等. 注意:下面的每个函数的参数字符串都会被当作或是一个系列的文件名来看待. 1 ...

  9. 浅显易懂 Makefile 入门 (03)— 目标文件搜索(VPATH 和 vpath 的区别和使用)、隐含规则

    1. 目标文件搜索(VPATH和vpath) 如果需要的文件是存在于不同的路径下(即源文件与 Makefile 文件不在同一个路径下),在编译的时候就用到了 Makefile 中为我们提供的目录搜索文 ...

最新文章

  1. Linux第二章自测习题——Linux系列学习笔记
  2. 使用 SAP Business Application Studio 创建 Fiori Elements 应用显示 OData 服务的数据
  3. 可能是目前最详细的Redis内存模型及应用解读
  4. Python模块之uuid
  5. 【转】LPCTSTR,LPWSTR, PTSTR, LPTSTR区别
  6. StringUtils.hasText()说明
  7. python中for循环的用法a+aa+aaa-Python练习题 013:求解a+aa+aaa……
  8. EXCEL实现文本类型数字字符串递增
  9. 树梅派应用38:树莓派 SAKS 扩展板挑战应用 之 PM2.5 指示灯
  10. 二十款漂亮CSS字体样式
  11. 02_菜鸟也能懂的 - 音视频基础知识。
  12. java emoji问号_java过滤emoji字符
  13. 基于pythonGUI的图形绘图及图元编辑系统
  14. 再回首往事如梦,再回首。。。。。。
  15. 个人知识管理系统 mysql_个人知识管理系统Version1.0开发记录(12)
  16. Springboot+vue预约上门维修服务系统
  17. LoadWebOffice实现在线编辑Word
  18. 深受Java程序员欢迎的10款Java IDE
  19. 关闭mac提示parallels弹窗
  20. 考研APP软件开发实现功能

热门文章

  1. c#和c++互操作(平台调用相关)
  2. iocp三层架构服务器模型
  3. 镁光ssd管理工具 linux,镁光C400固态硬盘08TH固件及升级软件
  4. gsm模块 java 录音_Android GSM驱动模块详细分析
  5. jstack 脚本 自动日志_运维老司机又翻车, 居然没用过日志切割Logrotate
  6. Spark SQL将rdd转换为数据集-以编程方式指定模式(Programmatically Specifying the Schema)
  7. 剑指offer面试题16. 数值的整数次方(二分法)
  8. 深度学习TensorFlow生产环境部署(环境准备篇)
  9. Android 在Android手机上获取其他应用的包名及版本号
  10. C#高级编程 第十五章 反射