Linux编程make命令介绍
摘要:在开发一个系统时,一般是将一个系统分成几个模块,这样做提高了系统的可维护性,但由于各个模块间不可避免存在关联,所以当一个模块改动后,其他模 块也许会有所更新,当然对小系统来说,手工编译连接是没问题,但是如果是一个大系统,存在很多个模块,那么手工编译的方法就不适用了。为此,在Linux系统中,专门提供了一个make命令来自动维护目标文件,与手工编译和连接相比,make命令的优点在于他只更新修改过的文件(在Linux中,一个文件被创建或更新后有一个最后修改时间,make命令就是通过这个最后修改时间来判断此文件是否被修改),而对没修改的文件则置之不理,并且make命令不会漏掉一个需要更新的文件。
文件和文件间或模块或模块间有可能存在倚赖关系,make命令也是依据这种依赖关系来进行维护的,所以我们有必要了解什么是依赖关系;打个最比喻:如 果我们想玩游戏,必须有游戏光碟和电脑(这两者间存在依赖关系),而有游戏光碟和电脑的前提条件是必须经济条件允许,另外当你有了游戏光碟后还要根据你的 心情来选择是玩哪种游戏;如下图:
玩游戏
/
/
游戏光碟 电脑
/ /
/ /
心情 经济情况
make命令当然不会自己知道这些依赖关系,而需要程序员将这些依赖关系写入一个叫makefile的文件中。Makefile文件中包含着一些目标,通常目标就是文件名,对每一个目标,提供了实现这个目标的一组命令以及和这个目标有依赖关系的其他目标或文件名,以下是一个简单的Makefile的简单例子:
#一个简单的Makefile
prog:prog1.o prog2.o //prog目标依赖prog1.o和prog2.o
gcc prog1.o prog2.o -o prog //prog1.o和prog2.o生成prog
prog1.o:prog1.c lib.h //prog1.o 依赖 prog1.c lib.h
gcc -c -I. -o prog1.o prog1.c
prog2.o:prog2.c
gcc -c prog2.c
以上Mamefile中定义了三个目标:prog、prog1和prog2,分号后是依赖文件列表,中间用一个分号隔开;
对于第一个目标文件prog来说,他有两个依赖文件:prog1.o和prog2.o,任何一个依赖文件更新,prog也要随之更新,命令gcc prog1.o prog2.o -o prog是生成prog的命令。make检查目标是否需要更新时采用递归的方法,递归从底层向上对过时目标进行更新,只有当一个目标所依赖的所有目标都为最新时,这个目标才会被更新。 以上面的Makefile为例,我们修改了prog2.c,执
相关文档:
Service Discovery Protocol(SDP)提供一种能力,让应用程序有方法发现哪种服务可用以及这种服务的特性。
服务发现协议(SDP或Bluetooth SDP)在蓝牙协议栈中对蓝牙环境中的应用程序有特殊的含意,发现哪个服务是可用的和确定这些可用服务的特征。SDP定义了bluetooth client发现可用bluetooth server服务和它们的特征的方法。 ......
Linux
原子操作的分析
本文针对Linux提供的原子操作函数
atomic_dec_and_test
做了详细的实例分析,解释了其原子性的本质意义。
并对
volatile
产生的误解做了解释。
1.
atomic_dec_and_test
分析
(
1
)先来看
atomic_dec_and_test
的定义:
11 #ifdef CONFIG_SMP
12 #def ......
Linux SVN的安装使用
The goal of the Subversion project is to build a version control system that is a compelling replacement for CVS in the open source community. The software is released under an Apache/BSD-style open source license.
SVN是一个版本控制软件,类似CVS,但是SVN的的有点是开源的,而且 ......
Cannot set serial info: Invalid argument
上面的报错,经过分析setserial源码与kernel 8250 driver,发现setserial通过ioctl(TIOCSSERIAL)将new_serial结构体(承载了
serial info)传入内核,内核8250驱动程序接到serial info后先get旧的serial info,再set新传入的serial info。
因此联 ......
1.下载成功后上传至服务器任意目录
2. 在当前目录输入
sh jdk-6u2-linux-i586-rpm.bin
3.看到 安装程序在询问您是否尊守许可协议页面 ......