makefile知识点01
2015-07-22 11:44
274 查看
1.
Makefile 文件里面
用 :=,表示变量赋值的时候立刻展开。
用 =,表示变量被用的时候才展开。
?= 是条件赋值, 比如
foo ?= $(bar)
只有当foo变量还没有被定义的时候,才会将bar的值赋给foo。
“+=” :变量值追加
eg:
objects = main.o foo.o bar.o utils.o
objects += another.o
3.set -e命令设置当前Shell进程为这样的状态:如果它执行的任何一条命令的退出状态非零则立刻终止,不再执行后续命令.
4fneq和ifeq条件语句,在这些语句块中是不能用自动变量的($@,$^,$<),另外要make clean的话不需要构建依赖文件
5.
如果
通常
通常
6.
1、先了解程序从无到有的过程,即编译到执行。
(图片的引用来自互联网)
下面用实例来演示整个过程。
以一个.c文件来演示吧,这里只谈讨编译到运行的过程,不讨论编码的复杂度。
add.c
[cpp]
view plaincopy
#include "stdio.h"
int add(int x,int y){
return x+y;
}
void main()
{
int c;
c = add(20,30);
printf("%d",c);
}
(1)先将源文件进行预编译产生.i文件
使用GCC的-E参数。
gcc -E -c add.c -o add.i
可以使用cat add.i来查看.i中的内容,内容太多我就不贴了。
cat -n add.i
(2)通过.i文件来产生汇编文件.s
gcc -S add.i
(3)通过.s文件生成.o文件(目标连接文件,即中间文件)
gcc -c add.s
(4)通过.o文件连接成最终的执行文件。
gcc add.o -o add
(5)最后执行生成的可执行文件。
./add
Makefile 文件里面
用 :=,表示变量赋值的时候立刻展开。
用 =,表示变量被用的时候才展开。
?= 是条件赋值, 比如
foo ?= $(bar)
只有当foo变量还没有被定义的时候,才会将bar的值赋给foo。
“+=” :变量值追加
eg:
objects = main.o foo.o bar.o utils.o
objects += another.o
3.set -e命令设置当前Shell进程为这样的状态:如果它执行的任何一条命令的退出状态非零则立刻终止,不再执行后续命令.
4fneq和ifeq条件语句,在这些语句块中是不能用自动变量的($@,$^,$<),另外要make clean的话不需要构建依赖文件
5.
如果
make执行的命令前面加了@字符,则不显示命令本身而只显示它的结果; Android中会定义某个变量等于@,例如 hide:= @
通常
make执行的命令如果出错(该命令的退出状态非0)就立刻终止,不再执行后续命令,但如果命令前面加了
-号,即使这条命令出错,
make也会继续执行后续命令。
通常
rm命令和
mkdir命令前面要加
-号,因为
rm要删除的文件可能不存在,
mkdir要创建的目录可能已存在,这两个命令都有可能出错,但这种错误是应该忽略的
6.
1、先了解程序从无到有的过程,即编译到执行。
(图片的引用来自互联网)
下面用实例来演示整个过程。
以一个.c文件来演示吧,这里只谈讨编译到运行的过程,不讨论编码的复杂度。
add.c
[cpp]
view plaincopy
#include "stdio.h"
int add(int x,int y){
return x+y;
}
void main()
{
int c;
c = add(20,30);
printf("%d",c);
}
(1)先将源文件进行预编译产生.i文件
使用GCC的-E参数。
gcc -E -c add.c -o add.i
可以使用cat add.i来查看.i中的内容,内容太多我就不贴了。
cat -n add.i
(2)通过.i文件来产生汇编文件.s
gcc -S add.i
(3)通过.s文件生成.o文件(目标连接文件,即中间文件)
gcc -c add.s
(4)通过.o文件连接成最终的执行文件。
gcc add.o -o add
(5)最后执行生成的可执行文件。
./add
相关文章推荐
- C#使用iTextSharp设置PDF所有页面背景图功能实例
- 2048源码分享
- uva 11374 Airport Express (Dijkstra)
- Android异步处理二:使用AsyncTask异步更新UI界面
- Java中从控制台读取输入的方法的总结
- pydev-python 链接mysql数据库(mac系统)
- poj 3984 迷宫问题 bfs输出路径
- php-fpm
- BNUOJ28891 Choosing number(矩阵快速幂)
- POJ-1011-Sticks-DFS(深搜)+四次剪枝
- Telnet协议详解 (转)
- C++ Primer 复习杂记(第三章)
- 安装和使用flume1.5传输数据(日志)到hadoop2.2
- debian 该分区的部分安装移动硬盘后无法识别。
- Java连接JDBC数据库
- 数据库端口号
- 7-11创始人:如何运用心理学让销量翻番?
- 14. JavaScript Date(日期)对象
- Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面
- 面向对象(二)(static,.final,抽象类,接口,内部类)