目录

origin函数

shell函数


origin函数

origin函数不像其它的函数,他并不操作变量的值,他只是告诉你你的这个变量是哪里来的?其语法是:

$(origin <variable>)

注意,<variable>是变量的名字,不应该是引用。所以你最好不要在<variable>中使用“$”字符。Origin函数会以其返回值来告诉你这个变量的“出生情况”,下面,是origin函数的返回值:

“undefined”
        如果<variable>从来没有定义过,origin函数返回这个值“undefined”。
“default”
        如果<variable>是一个默认的定义,比如“CC”这个变量,这种变量我们将在后面讲述。environment” 如果<variable>是一个环境变量,并且当Makefile被执行时,“-e”参数没有被打开。
“file”
        如果<variable>这个变量被定义在Makefile中。
“command line”
        如果<variable>这个变量是被命令行定义的。
“override”
        如果<variable>是被override指示符重新定义的。
“automatic”
        如果<variable>是一个命令运行中的自动化变量。关于自动化变量将在后面讲述。

这些信息对于我们编写Makefile是非常有用的,例如,假设我们有一个Makefile其包了一个定义文件Make.def,在Make.def中定义了一个变量“bletch”,而我们的环境中也有一个环境变量“bletch”,此时,我们想判断一下,如果变量来源于环境,那么我们就把之重定义了,如果来源于Make.def或是命令行等非环境的,那么我们就不重新定义它。于是,在我们的Makefile中,我们可以这样写:

ifdef bletchifeq "$(origin bletch)" "environment"bletch = barf, gag, etc.endif
endif

当然,你也许会说,使用override关键字不就可以重新定义环境中的变量了吗?为什么需要使用这样的步骤?是的,我们用override是可以达到这样的效果,可是override过于粗暴,它同时会把从命令行定义的变量也覆盖了,而我们只想重新定义环境传来的,而不想重新定义命令行传来的。

shell函数

shell函数也不像其它的函数。顾名思义,它的参数应该就是操作系统Shell的命令。它和反引号“`”是相同的功能。这就是说,shell函数把执行操作系统命令后的输出作为函数返回。于是,我们可以用操作系统命令以及字符串处理命令awk,sed等等命令来生成一个变量,如:

contents := $(shell cat foo)
files := $(shell echo *.c)

注意,这个函数会新生成一个Shell程序来执行命令,所以你要注意其运行性能,如果你的Makefile中有一些比较复杂的规则,并大量使用了这个函数,那么对于你的系统性能是有害的。特别是Makefile的隐晦的规则可能会让你的shell函数执行的次数比你想像的多得多。

#跟我一起写 Makefile# origin函数shell函数相关推荐

  1. (八)《跟我一起写Makefile》之使用函数

    前往我的个人博客,阅读体验更佳. 使用函数 在 Makefile 中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能.make 所支持的函数也不算很多,不过已经足够我们的操作了.函 ...

  2. matlab调用sh函数,Shell 函数定义与调用

    linux shell 可以用户定义函数,然后在 shell 脚本中可以随便调用. 以一个计算两数之和的函数为例: #! /bin/bash # 函数定义 sum(){ return $(($1+$2 ...

  3. makefile 初探之《shell 函数和origin 函数》

    shell 函数 shell 函数也不像其它的函数.顾名思义,它的参数应该就是操作系统 Shell 的命令.它和反引号"`"是相同的功能.这就是说,shell 函数把执行操作系统命 ...

  4. 跟我一起写 Makefile(整理版)

                      跟我一起写 Makefile                     作者:陈皓           (博客地址:http://blog.csdn.net/haoe ...

  5. Makefile中常用的函数

     常用函数调用 语法: $(<function> <arguments>)或 ${<function><arguments>} <functi ...

  6. 跟我一起写 Makefile(十)

    四.foreach 函数 foreach函数和别的函数非常的不一样.因为这个函数是用来做循环用的,Makefile中的foreach函数几乎是仿照于Unix标准Shell(/bin/sh)中的for语 ...

  7. Makefile中支持的函数大全

    From: http://blog.chinaunix.net/uid-25365622-id-3056374.html 一.描述 Makefile的函数调用,很像变量的使用,也是以"$&q ...

  8. 教你写Makefile

    转载文 Makefile 值得一提的是,在Makefile中的命令,必须要以[Tab]键开始. 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都 ...

  9. 跟我一起写 Makefile

    [精华] 跟我一起写 Makefile http://www.chinaunix.net 作者:gunguymadman  发表于:2009-06-30 15:55:17 [发表评论][查看原文][C ...

最新文章

  1. php如何做熔断降级,spring cloud 如何实现服务熔断服务降级
  2. C言语for轮回语句
  3. webconfig中配置各种数据库的连接字符串(转)
  4. Qt下使用OpenCV3打开摄像头并把图像显示到QLabel上
  5. 内存:你跑慢点行不行?CPU:跑慢点你养我吗?内存:我不管!
  6. asp.net导出GridView数据到Excel
  7. 音视频技术开发周刊 | 165
  8. Nginx 模块开发
  9. Linux内核很吊之 module_init解析 (下)【转】
  10. 2019年Linux与开源如何统治技术圈
  11. 北航 2012 秋季 现代软件工程 团队项目要求
  12. 【WS-Federation】到底有多少公司在用WS-Federation
  13. 如何使用CSS来修改SVG原点和制作SVG动画
  14. 三剑客之 sed详解
  15. c语言2 amp 3结果,C语言里23=什么?
  16. LIS和LCS LCIS
  17. PCB设计经验(1)
  18. kali下使用远程桌面连接
  19. 红孩儿编辑器的渲染子系统的渲染模块的函数依赖关系图
  20. 怎么下载老版本android,剪映旧版下载

热门文章

  1. Unity 实现汉字转拼音,获取汉字首字母
  2. BH66F2662-2
  3. Unity固定视角摄像机
  4. 激光SLAM基础(1) —— 激光SLAM框架和基本数学理论
  5. STM32有统一的命名规范
  6. 小旋风泛目录站群V3.1源码 (目录群控)mip+反向代理+ASCII+干扰码
  7. 数字图像处理 tofloat函数说明
  8. 欧科云链研究院:当硅谷银行闪崩,稳定币也难以“稳定”
  9. Web Services模式——第一部分:基本数据类型
  10. k12计算机科学框架,计算机科学教育人人享有的机会——美国《K-12计算机科学框架》的特点与启示.doc...