make 的 makefile 文件编写

今天在ubuntu下装了个CDT 准备学习C++ 了,但是却发现新建的工程里没有makefile 文件,反正以后肯定



是要用到的先把这玩意过一遍再说…于是开动…鼓捣了一阵子…弄完之后才发现…一开始认为高深莫测



的makefile 其实没有那么神秘..下面我就用我弄的一个简单的例子,来进行一下简单的说明吧.

C++代码:


 

makefile 内容:

 1 

# 定义对象变量

2 # mainfile
3 mf = hello.cpp
4 # object
5 obj = hello.o
6 # final file
7 ff = hello
8
9 # 显式定义指令 clean
10 .PHONY: clean
11
12

all : $(obj)
13

g++ $(obj) -o $(ff)
14

$(obj) : $(mf)
15

g++ -c $(mf) -o $(obj)
16

install:
17 cp $(ff)

/sbin/ $(ff)
18 uninstall:
19 rm /sbin/ $(ff)
20 clean:
21 rm -rf *.o $(ff)

C++ 代码不作说明,现在逐行来说明下 makefile 文件

1. 以"#"开头的均属于注释

2. 注释,跳过

3.声明了一个makefile 的变量(也许在makefile 里不该这么叫,但是从coder 角度出发便于理解)

4.注释,跳过

5.声明了又一个变量,在makefile中可以使用"$(变量名)"来调用

6.注释,跳过

7.声明了又一个变量

8.跳过

9.注释跳过

10.显式声明了一个 clean 指令,为什么现实后面做说明

11.跳过

12. 现在进入正题了… 冒号":"之前的,是目标对象,即其所属指令生成的结果,冒号":"之后的,是源文件



,即生成的结果所需的对象.但是在这里 all 不是最终生成的对象,而是一个伪对象,其目的是便于,make



命令,通过参数找到要执行的指令.all 也所 make 命令默认的参数.

13.指令所需要的实际编译命令和参数…此条中即是 将$(obj)最终编译成$(ff),值得注意的 ,命令行之



前必须是一个制表符,否则,编译操作时会报错

14.声明 以 $(mf) 编译为 $(obj)的处理过程

15.声明 以 $(mf) 编译为 $(obj)的处理过程所需要的命令行

16.为 make 命令建立 install 选项

17.为 make 命令建立 install 选项所需要的命令行

18.为 make 命令建立 uninstall 选项

19.为 make 命令建立 uninstall 选项所需要的命令行

20. 为 make 命令建立 clean 选项,在这里我们回到第10行,为什么我们需要显示的声明一条clean 指令



呢?因为,clean这里的clean 实际上是一个伪目标对象,如果你在执行这条指令时候,目录下存在一个名为



clean 的文件的话,此操作就会被认为是生成一个文件而无法执行,为了避免这一情况的出现,所以我们需



要显式声明一些伪目标对象.

21.为 make 命令建立 clean 选项所需要的命令行

综上:我们也可以理解了 为什么很多时候我们 make 之后还要make install了,因为他们通常是两个处理

过程,而win 下装软件,通常make 的过程已经被发行者做过了!

补充:makefile中已预定了一些变量,可以在下面的参考文献中找到这些变量用法

参考文献:

http://skyblue.blogbus.com/logs/95955.html

http://topic.csdn.net/u/20081008/16/002497a1-7568-4d9e-8033-7f5a0880900f.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值