makefile 使用 Tricks
- .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 *.o
rm *.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=123 all:
echo ${foo} # 递归生效,echo 显示的内容为123bar=456
foo:=${bar}
bar=${xxx}
xxx=123 all:
echo ${foo}
# 立即生效,echo 显示的内容为 456
3. all
all : hello another
hello : hello.cpp
g++ -o $@ $<
another : another.cpp
g++ -o $@ $<
- make hello 的话只编译 hello.cpp
- make another 的话只编译 another.cpp
- 直接 make 或 make all 的话会执行 hello.cpp 和 another.cpp 的编译命令
- 后面不加参数的话,会把第一个目标作为默认的(因此,make 等价于 make all,因为 all 为第一个目标)
makefile 使用 Tricks的更多相关文章
- TQ210 —— S5PV210 uboot顶层Makefile分析
转自:http://blog.csdn.net/wqx521/article/details/52469759 # (C) Copyright 2000-2008 # Wolfgang Denk, D ...
- 说说Makefile那些事儿
说说Makefile那些事儿 |扬说|透过现象看本质 工作至今,一直对Makefile半知半解.突然某天幡然醒悟,觉得此举极为不妥,只得洗心革面从头学来,以前许多不明觉厉之处顿时茅塞顿开,想想好记性不 ...
- 编写一个通用的Makefile文件
1.1在这之前,我们需要了解程序的编译过程 a.预处理:检查语法错误,展开宏,包含头文件等 b.编译:*.c-->*.S c.汇编:*.S-->*.o d.链接:.o +库文件=*.exe ...
- 编写简单的Makefile文件
makefile中的编写内容如下: www:hello.c x.h gcc hello.c -o hello clean: rm hello www:hello.c x.h 表示生成www这个文件需 ...
- 简单编写Makefile
相信很多朋友都有过这样的经历,看着开源项目中好几页的makefile文件,不知所云.在日常学习和工作中,也有意无意的去回避makefile,能改就不写,能用ide就用ide.其实makefile并没有 ...
- [转]Linux中configure/makefile
本文教你如何使用autoconf.automake等来制作一个以源代码形式(.tar.gz)发布的软件.并可在执行configure时使用自定义参数. 一.概述和基础知识 在Linux下得到一个以源代 ...
- Linux内核配置、编译及Makefile简述
Hi,大家好!我是CrazyCatJack.最近在学习Linux内核的配置.编译及Makefile文件.今天总结一下学习成果,分享给大家^_^ 1.解压缩打补丁 首先是解压缩你获取到的Linux内核. ...
- make 查找的文件名顺序为:“GNUmakefile”、“makefile”、“Makefile”
默认的情况下,make会在工作目录(执行make的目录)下按照文件名顺序寻找makefile文件读取并执行,查找的文件名顺序为:“GNUmakefile”.“makefile”.“Makefile”. ...
- 实例:对2个Makefile的备注
实例1:Makefile编译链接简单.c函数 example.c Makefile exe: example.c gcc example.c -o exe clean: rm exe 执行效果: 实例 ...
随机推荐
- 压力测试之ab命令
网站性能压力测试是服务器网站性能调优过程中必不可缺少的一环.只有让服务器处在高压情况下,才能真正体现出软件.硬件等各种设置不当所暴露出的问题. ab是apache自带的压力测试工具.ab非常实用,它不 ...
- 【转】vuex2.0 之 modules
vue 使用的是单一状态树对整个应用的状态进行管理,也就是说,应用中的所有状态都放到store中,如果是一个大型应用,状态非常多, store 就会非常庞大,不太好管理.这时vuex 提供了另外一种方 ...
- 如何把一个杯子卖到上万元,不学你就OUT了
我们可以看看一个产品卖到多少钱需要占有什么样的资源: 第1种卖法:卖产品本身的使用价值,只能卖3元/个 如果你将他仅仅当一只普通的杯子,放在普通的商店,用普通的销售方法,也许它最多只能卖3元钱,还可能 ...
- was控制台误禁用后的恢复启用办法
websphere是可以配置禁用控制台的,下面以was6.1.单profile.https控制台为例介绍在(误)禁用控制台后如何恢复启用控制台. 1. 禁用控制台 WCInboundAdmin--控制 ...
- 最新jquery+easyui_api培训文档
目 录 1 Accordion(可折叠标签) 2 1.1 实例 2 1.2 参数 3 2 DateBox(日期框) 4 2.1 实例 4 2.2 参数 6 2.3 事件 6 2.4 方法 6 3 C ...
- 微信支付 php兼容问题
总结: php7 已删除 HTTP_RAW_POST_DATA 获取时需要file_get_contents("php://input"); 下面的是兼容方法. //存储微信的回 ...
- js中如何通过身份证号计算出生日期和年龄
在html中有如下标签 身份证号:<input type="text" id="Gra_IDCard" onChange="IDCardChan ...
- laravel基于Bootstrap的成功和失败的提示信息和验证提示信息
message.blade.php <!-- 成功提示框 --> @if(Session::has("success")) <div class="al ...
- React中禁止chrome填充密码表单
当 input 的 type="password" 时,chrome浏览器会以 type="password" 为标识记住输入的用户名和密码, 如果chrome ...
- 怎样判断JS对象中的属性
// 如何在不访问属性值的情况下判断对象中是否存在这个属性 var obj = { a: 2 }; Object.defineProperty( obj, 'b', // 让 b 不可枚举 { enu ...