Makefile 总结

原创 2016年08月31日 12:09:42
一 Makefile 变量赋值
   Makefile 赋值有四种方式,
1. =   延迟赋值,或者称作展开赋值 变量等待 Makefile 完全展开后再确定实际的值
x = $(y) 2
y = 3
$(warning $(2)) #at here x already is 3 2 
z = 4



2. :=  立即赋值,在Makefile 展开到这个位置时,立即赋值

x := $(y) 2
y := 3
$(warning $(2)) #at here x still is 2 
z := 4


3. ?=  如果变量已经赋值,则什么都不做,如果是第一次定义,则按照延迟赋值的方式(=)赋值
x := 1
x ?= 2 # x already , so x is 1


4. += 变量累加
x := 1
x += 2  #x is 1 2


二 shell 在Makefile 中的调用
1.在Makefile中只能在target中调用Shell脚本,其他地方是不能输出的。比如如下代码就是没有任何输出:


VAR="Hello"
echo "$VAR"
all:


正确的使用方式:
VAR := "Hello World" "Android" 
all:
echo $(VAR)


在非target中调用脚本需要使用Makefile shell 函数:
https://www.gnu.org/software/make/manual/html_node/Shell-Function.html
$(shell rm $(VAR))


2.Makefile中所有以 $ 打头的单词都会被解释成Makefile中的变量。如果你需要调用shell中的变量(或者正则表达式中锚定句位$),
  都需要加两个$ 符号($$)。


3.在Makefile中执行shell命令,一行创建一个进程来执行。这也是为什么很多Makefile中有很多行的末尾都是"\”,
  以此来保证代码是一行而不是多行,这样Makefile可以在一个进程中执行,
all:
for var in $(VAR);\
do \
echo $${var};\
done




三 Makefile 函数
一、函数的调用语法
a 函数调用,很像变量的使用,也是以“$”来标识的,其语法如下:
$( ) 
或是
${ }
就是函数名 是函数的参数,参数间以逗号“,”分隔,
而函数名和参数之间以“空格”分隔。函数调用以“$”开头,以圆括号或花括号把函数名和参数括起。
b 自定义函数
define function-name
   ...
   ...
endef


# $(1): Directory to copy
# $(2): Location to copy it to
# The "ls -A" is to prevent "acp s/* d" from failing if s is empty.
define package_files-copy-root
 if [ -d "$(strip $(1))" -a "$$(ls -A $(1))" ]; then \
   mkdir -p $(2) && \
   $(ACP) -rd $(strip $(1))/* $(2); \
 fi
endef

github 地址:
https://github.com/louiewh/Makefile/
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(78) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
版权声明:本文为博主原创文章,转载请注明出处。

makefile总结 (可做手册使用)

自己补充两个概念: make:一种控制编译或者重复编译软件的工具 makefile:是一个文本形式的脚本文件,包含一些规则,具体告诉make编译哪些文件,怎么编译。 Makefile 是和 make ...
  • qq_33850438
  • qq_33850438
  • 2016年07月14日 22:02
  • 679

makefile全面总结

makefile很重要       什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professio...
  • nyist327
  • nyist327
  • 2015年01月09日 13:17
  • 877

Makefile的编写总结

在Linux做开发,工程的编译输出,需要自己编写Makefile来构建,下面笔者根据自己的实践,做一些总结,本文并不是什么教程, 只是笔者觉得一些重要的东西在此记录下来。 一、基本格式 targe...
  • KentZhang_
  • KentZhang_
  • 2015年09月01日 22:10
  • 406

makefile学习总结

makefile学习总结之前在跑板子时,自己了解过一些makefile,也尝试自己编写过,今天有时间,就学了学实验楼教程的makefile相关内容,故做了如下笔记。makefile简介makefile...
  • yzhang6_10
  • yzhang6_10
  • 2017年01月07日 20:58
  • 566

makefile 详细用法之二

最近在学习Linux下的C编程,买了一本叫《Linux环境下的C编程指南》读到makefile就越看越迷糊,可能是我的理解能不行。             于是google到了以下这篇文章。通俗易懂...
  • dapengbusi
  • dapengbusi
  • 2016年09月18日 16:37
  • 1140

Linux下C++的通用Makefile与解析

本文给出万能Makefile的具体实现,以及对其中的关键点进行解析。所谓C++万能Makefile,即可编译链接所有的C++程序,而只需作很少的修改。 号称万能Makefile,一统江湖。我对原版的...
  • zhoujiaxq
  • zhoujiaxq
  • 2014年05月16日 13:54
  • 10382

多层级的makefile编写——递归调用makefile

文件层级结构: │  Makefile │  tmp │ ├─include │      public.h │ └─src     ├─moda     │      Makefile     │ ...
  • wangyuling1234567890
  • wangyuling1234567890
  • 2014年03月25日 23:52
  • 2413

makefile常用写法和简易写法

先说长用到的-l: 小写的l就是依赖的lib库,lib首字母,很好记。 -L: 引用的三方lib库所在目录,lib首字母大写就是目录,也好记。 -I: 少不了头文件目录,还是老路子,include...
  • persitail
  • persitail
  • 2016年09月20日 12:36
  • 676

Linux下Makefile的编写及四个特殊符号的意义@、$@、$^、$<

我们先看三段C++程序: 一、line1的源码 line1.h #ifndef _LINE_1_H #define _LINE_1_H void line1_print(const char...
  • runfarther
  • runfarther
  • 2015年11月25日 14:47
  • 4683

Makefile 实际用例分析(一) ------- 比较通用的一种架构

这里不再说Makefile的基本知识,如果需要学习,那么请参考: 下载:makefile 中文手册 或者 点击打开链接 或者 跟我一起写Makefile( 陈皓 ) 这里说的是一般的实际的一个工...
  • shanshanpt
  • shanshanpt
  • 2013年12月08日 12:20
  • 5451
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Makefile 总结
举报原因:
原因补充:

(最多只允许输入30个字)