makefile 中 $@ $^ % 使用

makefile 中 $@ $^ % 使用
makefile 中 $@ $^ % 使用

makefile 中$@ $^ %< 使用

https://www.360docs.net/doc/241309423.html,/kesaihao862/article/details/7332528

这篇文章介绍在LINUX下进行C语言编程所需要的基础知识。在这篇文章当中,我们将会学到以下内容:源程序编译Makefile的编写程序库的链接程序的调试头文件和系统求助1.源程序的编译在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器。下面我们以一个实例来说明如何使用gcc编译器。假设我们有下面一个非常简单的源程序(hello.c):int main(int argc,char

**argv){printf("Hello Linux\n");}要编译这个程序,我们只要在命令行下执行:gcc -o hello hello.cgcc 编译器就会为我们生成一个hello的可执行文件。执行./hello就可以看到程序的输出结果了。命令行中gcc表示我们是用gcc来编译我们的源程序,-o 选项表示我们要求编译器给我们输出的可执行文件名为hello 而hello.c是我们的源程序文件。gcc编译器有许多选项,一般来说我们只要知道其中的几个就够了。-o 选项我们已经知道了,表示我们要求输出的可执行文件名。-c选项表示我们只要求编译器输出目标代码,而不必要输出可执行文件。-g选项表示我们要求编译器在编译的时候提供我们以后对程序进行调试的信息。知道了这三个选项,我

们就可以编译我们自己所写的简单的源程序了,如果你想要知道更多的选项,可以查看gcc的帮助文档,那里有着许多对其它选项的详细说明。2.Makefile的编写假设我们有下面这样的一个程序,源代码如下:/* main.c */#include "mytool1.h"#include "mytool2.h"

int main(int argc,char **argv){mytool1_print("hello");mytool2_print("hello");}/* mytool1.h */

#ifndef _MYTOOL_1_H#define _MYTOOL_1_Hvoid mytool1_print(char *print_str);#endif/* mytool1.c */#include "mytool1.h"void mytool1_print(char *print_str){printf("This

is mytool1 print %s\n",print_str);}/* mytool2.h */#ifndef

_MYTOOL_2_H#define _MYTOOL_2_Hvoid

mytool2_print(char *print_str);#endif/* mytool2.c */#include "mytool2.h"void mytool2_print(char *print_str){printf("This

is mytool2 print %s\n",print_str);}当然由于这个程序是很短的我们可以这样来编译gcc -c main.cgcc -c mytool1.cgcc -c mytool2.cgcc -o main main.o mytool1.o mytool2.o这样的话我们也可以产生main程序,而且也不时很麻烦。但是如果我们考虑一下如果有一天我们修改了其中的一个文件(比如说mytool1.c)那么我们难道还要重新输入上面的命令?也许你会说,这个很容易解决啊,我写一个SHELL脚本,让她帮我去完成不就可以了。是的对于这个程序来说,是可

以起到作用的。但是当我们把事情想的更复杂一点,如果我们的程序有几百个源程序的时候,难道也要编译器重新一个一个的去编译?为此,聪明的程序员们想出了一个很好的工具来做这件事情,这就是make。我们只要执行以下make,就可以把上面的问题解决掉。在我们执行make之前,我们要先编写一个非常重要的文件。--Makefile。对于上面的那个程序来说,可能的一个Makefile的文件是:# 这是上面那个程序的Makefile文件main:main.o mytool1.o mytool2.ogcc -o main main.o mytool1.o mytool2.omain.o:main.c mytool1.h mytool2.hgcc -c main.cmytool1.o:mytool1.c mytool1.hgcc -c mytool1.cmytool2.o:mytool2.c

mytool2.hgcc -c mytool2.c有了这个Makefile文件,不过我们什么时候修改了源程序当中的什么文件,我们只要执行make命令,我们的编译器都只会去编译和我们修改的文件有关的文件,其它的文件她连理都不想去理的。下面我们学习Makefile是如何编写的。在Makefile中也#开始的行都是注释行.Makefile中最重要的是描述文件的依赖关系的说明。一般的格式是:target:componentsTAB rule第一行表示的是依赖关系。第二行是规则。比如说我们上面的那个Makefile 文件的第二行main:main.o mytool1.o mytool2.o表示我们的目标(target)main的依赖对象(components)是main.o mytool1.o mytool2.o 当倚赖的对象在目标修改后修改的话,

就要去执行规则一行所指定的命令。就象我们的上面那个Makefile第三行所说的一样要执行gcc -o main main.o mytool1.o mytool2.o 注意规则一行中的TAB表示那里是一个TAB键Makefile有三个非常有用的变量。分别是$@,$^,$<代表的意义分别是:$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件。如果我们使用上面三个变量,

那么我们可以简化我们的Makefile文件为:# 这是简化后的Makefilemain:main.o mytool1.o mytool2.ogcc -o $@

$^main.o:main.c mytool1.h mytool2.hgcc -c $<mytool1.o:mytool1.c mytool1.hgcc -c $<mytool2.o:mytool2.c mytool2.hgcc -c $<经过简化后我们的Makefile是简单了

一点,不过人们有时候还想简单一点。这里我们学习一个Makefile的缺省规则.c.o:gcc -c $<这个规则表示所有

的 .o文件都是依赖与相应的.c文件的。例如mytool.o依赖于mytool.c这样Makefile还可以变为:# 这是再一次简化

后的Makefilemain:main.o mytool1.o mytool2.ogcc -o $@ $^.c.o:gcc -c $<好了,我们的Makefile 也差不多了,如果想知道更多的关于Makefile规则可以查看相应的文档。3.程序库的链接试着编译下面这个程序/* temp.c */#include

int main(int argc,char **argv){double value;

printf("Value:%f\n",value);}这个程序相当简单,但是当我们用gcc -o temp temp.c 编译时会出现下面所示的错误。

/tmp/cc33Kydu.o:In function `main':

/tmp/cc33Kydu.o(.text+0xe):undefined reference to

`log'collect2:ld returned 1 exit status出现这个错误是因为编译器找不到log的具体实现。虽然我们包括了正确的头文件,但是我们在编译的时候还是要连接确定的库。在Linux 下,为了使用数学函数,我们必须和数学库连接,为此我们要加入-lm 选项。gcc -o temp temp.c -lm这样才能够正确的编译。也许有人要问,前面我们用printf函数的时候怎么没有连接库呢?是这样的,对于一些常用的函数的实现,gcc编译器会自动去连接一些常用库,这样我们就没有必要自己去指定了。有时候我们在编译程序的时候还要指定库的路径,这个时候我们要用到编译器的-L选项指定路径。比如说我们有一个库在/home/hoyt/mylib下,这样我们编译的时候还要加上-L/home/hoyt/mylib。对于一些标准库来说,我们没有必要指出路径。只要它们在起缺省库的路径下就可以了。系统的缺省库的路径/lib /usr/lib /usr/local/lib 在这三个路径下面的库,我们可以不指定路径。还有一个问题,有时候我们使用了某个函数,但是我们不知道库的名字,这个时候怎么办呢?很抱歉,对于这个问题我也不知道答案,我只有一个傻办法。首先,我到标准库路径下面去找看看有没有和我用的函数相关的库,我就这样找到了线程(thread)函数的库文件(libpthread.a)。当然,如果找不到,只有一个

笨方法。比如我要找sin这个函数所在的库。就只好用nm -o /lib/*.so|grep sin>~/sin 命令,然后看~/sin文件,到那里面去找了。在sin文件当中,我会找到这样的一行

libm-2.1.2.so:00009fa0 W sin 这样我就知道了sin在

libm-2.1.2.so库里面,我用-lm选项就可以了(去掉前面的lib 和后面的版本标志,就剩下m了所以是-lm)。如果你知道怎么找,请赶快告诉我,我回非常感激的。谢谢!4.程序的调试我们编写的程序不太可能一次性就会成功的,在我们的程序当中,会出现许许多多我们想不到的错误,这个时候我们就要对我们的程序进行调试了。最常用的调试软件是gdb.

如果你想在图形界面下调试程序,那么你现在可以选择xxgdb.记得要在编译的时候加入-g选项.关于gdb的使用可以看gdb的帮助文件。由于我没有用过这个软件,所以我也不能够说出如何使用。不过我不喜欢用gdb.跟踪一个程序是很烦的事情,我一般用在程序当中输出中间变量的值来调

试程序的。当然你可以选择自己的办法,没有必要去学别人的。现在有了许多IDE环境,里面已经自己带了调试器了。你可以选择几个试一试找出自己喜欢的一个用。5.头文件和系统求助有时候我们只知道一个函数的大概形式,不记得确切的表达式,或者是不记得着函数在那个头文件进行了说明。这个时候我们可以求助系统。比如说我们想知道fread这个函数的确切形式,我们只要执行man fread 系统就会输出

着函数的详细解释的。和这个函数所在的头文件说明了。如果我们要write这个函数的说明,当我们执行man write时,输出的结果却不是我们所需要的。因为我们要的是write这个函数的说明,可是出来的却是write这个命令的说明。为了得到write的函数说明我们要用man 2 write. 2表示我们用的write这个函数是系统调用函数,还有一个我们常用的是3表示函数是C的库函数。记住不管什么时候,man都是我们的最好助手。附1

(1):=是为了避免递归定义,相当于c语言当中的赋值运算符。x := foo y := $(x) bar x := later 其等价于:y := foo bar x := later 如果用=, 那么$y就等于later bar了。(2)=这个运算符有点特殊,例如x = foo y = $(x) bar x = later 这个时候y就等于later bar了而不是foo bar。正因为如此,这个运算符是不能自己给自己赋值的,比如

y=$(y)ss,系统就会报错。(3)另外,+=则表示追加符号。附2

Makefile符号说明GNU make makefile 基本结构makefile 变量GNU make 的主要预定义变量隐含规则makefile

范例运行make 1.9.1 GNU make

在大型的开发项目中,通常有几十到上百个的源文件,如果每次均手工键入gcc 命令进行编译的话,则会

非常不方便。因此,人们通常利用make 工具来自动完成编

译工作。这些工作包括:如果仅修改了某几个

源文件,则只重新编译这几个源文件;如果某个头文件被修改了,则重新编译所有包含该头文件的源文件。

利用这种自动编译可大大简化开发工作,避免不必要的重新编译。

实际上,make 工具通过一个称为makefile 的文件来完成

并自动维护编译工作。makefile 需要按照某种

语法进行编写,其中说明了如何编译各个源文件并连接生成可执行文件,并定义了源文件之间的依赖关系。

当修改了其中某个源文件时,如果其他源文件依赖于该文件,则也要重新编译所有依赖该文件的源文件。

makefile 文件是许多编译器,包括Windows NT 下的编译器维护编译信息的常用方法,只是在集成开发环

境中,用户通过友好的界面修改makefile 文件而已。

默认情况下,GNU make 工具在当前工作目录中按如下顺序搜索makefile:

* GNUmakefile

* makefile

* Makefile

在UNIX 系统中,习惯使用Makefile 作为makfile 文件。如果要使用其他文件作为makefile,则可利用类

似下面的make 命令选项指定makefile 文件:

$ make -f Makefile.debug1.9.2 makefile 基本结构makefile 中一般包含如下内容:

* 需要由make 工具创建的项目,通常是目标文件和可执行文件。通常使用“目标(target)”一词来表示

要创建的项目。

* 要创建的项目依赖于哪些文件。

* 创建每个项目时需要运行的命令。

例如,假设你现在有一个C++ 源文件test.C,该源文件包含有自定义的头文件test.h,则目标文件test.o

明确依赖于两个源文件:test.C 和test.h。另外,你可能只希望利用g++ 命令来生成test.o 目标文件。

这时,就可以利用如下的makefile 来定义test.o 的创建规则:# This makefile just is a example.

# The following lines indicate how test.o depends

# test.C and test.h, and how to create test.otest.o: test.C test.h

g++ -c -g test.C从上面的例子注意到,第一个字符为# 的行为注释行。第一个非注释行指定test.o 为目标,并且依赖于

test.C 和test.h 文件。随后的行指定了如何从目标所依赖的文件建立目标。

当test.C 或test.h 文件在编译之后又被修改,则make

工具可自动重新编译test.o,如果在前后两次

编译之间,test.C 和test.h 均没有被修改,而且test.o 还存在的话,就没有必要重新编译。这种依赖

关系在多源文件的程序编译中尤其重要。通过这种依赖关系的定义,make 工具可避免许多不必要的编译工

作。当然,利用Shell 脚本也可以达到自动编译的效果,但是,Shell 脚本将全部编译任何源文件,包括

哪些不必要重新编译的源文件,而make 工具则可根据目标上一次编译的时间和目标所依赖的源文件的更新

时间而自动判断应当编译哪个源文件。

一个makefile 文件中可定义多个目标,利用make target 命令可指定要编译的目标,如果不指定目标,

则使用第一个目标。通常,makefile 中定义有clean 目标,可用来清除编译过程中的中间文件,例如:

clean:

rm -f *.o

运行make clean 时,将执行rm -f *.o 命令,最终删除所有编译过程中产生的所有中间文件。1.9.3 makefile 变量GNU 的make 工具除提供有建立目标的基本功能之外,还有许多便于表达依赖性关系以及建立目标的命令的特

色。其中之一就是变量或宏的定义能力。如果你要以相同的编译选项同时编译十几个C 源文件,而为每个目

标的编译指定冗长的编译选项的话,将是非常乏味的。但利用简单的变量定义,可避免这种乏味的工作:# Define macros for name of compiler

CC = gcc# Define a macr o for the CC flags

CCFLAGS = -D_DEBUG -g -m486# A rule for building a object file

test.o: test.c test.h

$(CC) -c $(CCFLAGS) test.c在上面的例子中,CC 和CCFLAGS 就是make 的变量。GNU make 通常称之为变量,而其他UNIX 的make

工具称之为宏,实际是同一个东西。在makefile 中引用变

量的值时,只需变量名之前添加$ 符号,如

上面的$(CC) 和$(CCFLAGS)。1.9.4 GNU make 的主要预定义变量

GNU make 有许多预定义的变量,这些变量具有特殊的含义,可在规则中使用。表1-5 给出了一些主要的

预定义变量,除这些变量外,GNU make 还将所有的环境变量作为自己的预定义变量。表

1-5 GNU make 的主要预定义变量

预定义变量含义

$* 不包含扩展名的目标文件名称。

$+ 所有的依赖文件,以空格分开,并以出现

的先后为序,可能包含重复的依赖文件。

$< 第一个依赖文件的名称。

$? 所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚。

$@ 目标的完整名称。

$^ 所有的依赖文件,以空格分开,不包含重复的依赖文件。

$% 如果目标是归档成员,则该变量表示目标的归档成员名称。例如,如果目标名称

为mytarget.so(image.o),则$@ 为mytarget.so,而$% 为image.o。

AR 归档维护程序的名称,默认值为ar。ARFLAGS 归档维护程序的选项。

AS 汇编程序的名称,默认值为as。ASFLAGS 汇编程序的选项。

CC C 编译器的名称,默认值为cc。CCFLAGS C 编译器的选项。

CPP C 预编译器的名称,默认值为$(CC) -E。CPPFLAGS C 预编译的选项。

CXX C++ 编译器的名称,默认值为g++。CXXFLAGS C++ 编译器的选项。

FC FORTRAN 编译器的名称,默认值为

f77。

FFLAGS FORTRAN 编译器的选项。1.9.5 隐含规则

GNU make 包含有一些内置的或隐含的规则,这些规则定义了如何从不同的依赖文件建立特定类型的目标。

GNU make 支持两种类型的隐含规则:

* 后缀规则(Suffix Rule)。后缀规则是定义隐含规则的老风格方法。后缀规则定义了将一个具有某个

后缀的文件(例如,.c 文件)转换为具有另外一种后缀的文件(例如,.o 文件)的方法。每个后缀规

则以两个成对出现的后缀名定义,例如,将 .c 文件转换为 .o 文件的后缀规则可定义为:.c.o:

$(CC) $(CCFLAGS) $(CPPFLAGS) -c -o $@ $<* 模式规则(pattern rules)。这种规则更加通用,因为可以利用模式规则定义更加复杂的依赖性规则。

模式规则看起来非常类似于正则规则,但在目标名称的前面多了一个% 号,同时可用来定义目标和依赖

文件之间的关系,例如下面的模式规则定义了如何将任意一个X.c 文件转换为X.o 文件:%.c:%.o

$(CC) $(CCFLAGS) $(CPPFLAGS) -c -o $@ $<

1.9.6 makefile 范例1.9.7 运行make

我们知道,直接在make 命令的后面键入目标名可建立指定

的目标,如果直接运行make,则建立第一个

目标。我们还知道可以用make -f mymakefile 这样的命令

指定make 使用特定的makefile,而不是

默认的GNUmakefile、makefile 或Makefile。但GNU make 命令还有一些其他选项,表1-6 给出了

这些选项。表1-6 GNU make 命令的常用命令行选项命令行选项含义

-C DIR 在读取makefile 之前改变到指定的目录DIR。

-f FILE 以指定的FILE 文件作为makefile。-h 显示所有的make 选项。

-i 忽略所有的命令执行错误。

-I DIR 当包含其他makefile 文件时,可利用该选项指定搜索目录。

-n 只打印要执行的命令,但不执行这些命令。

-p 显示make 变量数据库和隐含规则。-s 在执行命令时不显示命令。

-w 在处理makefile 之前和之后,显示工作目录。

-W FILE 假定文件FILE 已经被修改。

linux sheel脚本里面,在if语句里“$? -eq o” 这是什么意思!!!

首先应该是0不是o

$?是shell变量,表示"最后一次执行命令"的退出状态.0为成功,非0为失败.

在你的问题里就是,if语句前一个命令执行成功,就怎么样

跟我一起写Makefile

跟我一起写Makefile 陈皓 1 概述 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。 因为,makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。 makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。 现在讲述如何写makefile的文章比较少,这是我想写这篇文章的原因。当然,不同产商的make各不相同,也有不同的语法,但其本质都是在“文件依赖性”上做文章,这里,我仅对GNU的make进行讲述,我的环境是RedHat Linux 8.0,make的版本是3.80。必竟,这个make是应用最为广泛的,也是用得最多的。而且其还是最遵循于IEEE 1003.2-1992 标准的(POSIX.2)。 在这篇文档中,将以C/C++的源码作为我们基础,所以必然涉及一些关于C/C++的编译的知识,相关于这方面的内容,还请各位查看相关的编译器的文档。这里所默认的编译器是UNIX下的GCC和CC。 2 关于程序的编译和链接 在此,我想多说关于程序编译的一些规范和方法,一般来说,无论是C、C++、还是pas,首先要把源文件编译成中间代码文件,在Windows下也就是.obj 文件,UNIX下是.o 文件,即Object File,这个动作叫做编译(compile)。然后再把大量的Object File合成执行文件,这个动作叫作链接(link)。 编译时,编译器需要的是语法的正确,函数与变量的声明的正确。对于后者,通常是你需要告诉编译器头文件的所在位置(头文件中应该只是声明,而定义应该放在C/C++文件中),只要所有的语法正确,编译器就可以编译出中间目标文件。一般来说,每个源文件都应该对应于一个中间目标文件(O文件或是OBJ 文件)。 链接时,主要是链接函数和全局变量,所以,我们可以使用这些中间目标文件(O文件或是OBJ文件)来链接我们的应用程序。链接器并不管函数所在的源文件,只管函数的中间目标文件(Object File),在大多数时候,由于源文件太多,编译生成的中间目标文件太多,而在链接时需要明显地指出中间目标文件名,这对于编译很不方便,所以,我们要给中间目标文件打个包,在Windows下这种包叫“库文件”(Library File),也就是.lib 文件,在UNIX下,是Archive File,也就是.a 文件。 总结一下,源文件首先会生成中间目标文件,再由中间目标文件生成执行文件。在编译时,编译器只检测程序语法,和函数、变量是否被声明。如果函数未被声明,编译器会给出一个警告,但可以生成Object File。而在链接程序时,链接器会在所有的Object File中找寻函数的实现,如果找不到,那到就会报链接错

Makefile两个实验

实验十四Makefile工程管理器 14.1 编写包含多文件的Makefile 【实验内容】 编写一个包含多文件的Makefile。 【实验目的】 通过对包含多文件的Makefile的编写,熟悉各种形式的Makefile,并且进一步加深对Makefile中用户自定义变量、自动变量及预定义变量的理解。 【实验平台】 PC机、CentOS 5 操作系统、gcc等工具。 【实验步骤】 1.用vi在同一目录下编辑两个简单的Hello程序,如下所示: #hello.c #include "hello.h" int main() { printf("Hello everyone!\n"); } #hello.h #include 2.仍在同一目录下用vim编辑Makefile,不使用变量替换,用一个目标体实现(即直接将 hello.c和hello.h编译成hello目标体)。并用make验证所编写的Makefile是否正确。 3.将上述Makefile使用变量替换实现。同样用make验证所编写的Makefile是否正确 4.用编辑另一Makefile,取名为Makefile1,不使用变量替换,但用两个目标体实现(也 就是首先将hello.c和hello.h编译为hello.o,再将hello.o编译为hello),再用make 的‘-f’选项验证这个Makefile1的正确性。 5.将上述Makefile1使用变量替换实现 【详细步骤】 1.用vi打开上述两个代码文件…hello.c?和…hello.h? 2.在shell命令行中用gcc尝试编译,使用命令:…gcc hello.c -o hello?,并运行hello可执 行文件查看结果。 3.删除此次编译的可执行文件:rm –rf hello 4.用vim编辑Makefile,如下所示: hello:hello.c hello.h gcc hello.c -o hello 5.退出保存,在shell中键入:make查看结果 6.再次用vim打开Makefile,用变量进行替换,如下所示: OBJS :=hello.o CC :=gcc hello:$(OBJS) $(CC) $^ -o $@ 7.退出保存,在shell中键入:make查看结果

房地产市场分析报告

房地产市场分析报告 目录 一、怀化市环境分析 1.怀化概况 2.地理位置 二、怀化市房地产整体发展状况分析 1.开发区 2.城中区 3.河西区 4.城东区 】 5.铁北区 6.城南区 三、怀化市在售楼盘调查分析(突出楼盘) 代表性楼盘的基本经济指标 四、客户群体分析 1.客户需求及年龄阶段 2.客户群体特征 3.客户群依据职业可以细分为 五、怀化市主要营销手段及推广方式 1.销售前期 2.销售期 [ 六、国家政策的影响

第一部分怀化市环境分析 一、怀化概况 怀化处于武陵山脉和雪峰山脉之间,沅水自南向北贯穿全境。怀化地形复杂,山水相间,处处是景,可谓是步移景异。怀化森林覆盖率高达%,远远高于全国平均水平(不到20%),是全国九大生态良好区域之一。 怀化历史悠久,古称“荆楚之地”。早在新石器时代,这里的先民们就进入了原始农业和家畜饲养经济为主的定居生活。秦朝统一中国后,在此设黔中郡,开始了国家的行政治理,距今已有2200多年的历史。新中国成立后,怀化分设会同、沅陵两个专区。1952年撤销沅陵专区,以会同专区为基础成立芷江专区,将原沅陵专区的沅陵、辰溪、溆浦、麻阳等4县划归芷江专区,形成现在怀化市的雏型。1953年改名黔阳专区。1968年改称黔阳地区。1981年改称怀化地区。1998年撤销怀化地区,改设地级怀化市。现辖10县1市1区1管理区(县级)和一个省级开发区和一个省级工业园,包括鹤城区、洪江市、中方县、沅陵县、辰溪县、溆浦县、会同县、麻阳苗族自治县、新晃侗族自治县、芷江侗族自治县、靖州苗族侗族自治县和通道侗族自治县,全市共245个乡、72个镇、5个街道办事处,有312个居民委员会和4056个村民委员会。怀化是个多民族聚居的地区,现有侗、苗、土家、瑶等31 个少数民族,2009年末总人口为万人,其中少数民族占30%左右。 二、地理位置 怀化市地处湖南西南部,面积万平方公里,总人口万,其中侗、苗、土家、瑶等46 个少数民族人口约占40%,是一个多民族聚居的山区城市。怀化自古有“黔楚咽喉”之称,是我国东中部辐射大西南的桥头堡,被誉为“火车拖来的城市”。湘黔、枝柳、渝怀铁路交汇于市区,320、209、319国道和正在建设的上瑞、长渝、包茂高速公路贯穿境内,芷江机场距怀化市区仅30余公里,沅水6大支流常年通航里程1200多公里,全市即将形成水、陆、空全方位的立体交通网络;“沪(上海)成(成都)”及“呼(呼和浩特)北(北海)”两条国家一级通讯光缆在怀化交汇。这些使怀化作为大西南地区重要的交通、通讯枢纽地位日益凸现。优越的区位,便捷的交通,加上怀化人民坚持对外开放,恪尽职守、励精图治、奋发图强、艰苦工作,使怀化市城区在近30年里由一个城区面积不足3平方公里、人口3000多人的边陲小镇,快速崛起为一个城区面积52平方公里、人口52万的中等城市,已成为湘、鄂、渝、黔、桂周边地区重要的物资、信息、技术流转中心,经济辐射面达五省(市、区)周边44个县、约9万平方公里、1500万人口的广大区域。从地理位置上看,怀化南接广西(桂林、柳州),西连贵州(铜仁、黔东南),与湖南的邵阳、娄底、益阳、常德、张家界等市和湘西苗族土家族自治州接壤,素有“黔滇门户”、“全楚咽喉”之称,今有湖南“西大门”之美誉。怀化市素有“火车拖来的城市”之喻。国家重要铁路动脉湘黔铁路和焦柳线及在建的渝怀铁路呈“大”字在城区交汇,全境有11个县(市、区)通有铁路,境内铁路通车里程499公里。始发客运列车已直达北京、上海、广州、深圳、贵阳等地,怀化编组站(怀化南站)是全国九大编组站这一,货物吞吐能力居全国第九,在建的怀化新编组站(怀化东站)的吞吐能力将更高。目前,每天由怀化始发和终到的客运列车有10对,过境客运

手动建立makefile简单实例解析

手动建立makefile简单实例解析 假设我们有一个程序由5个文件组成,源代码如下:/*main.c*/ #include "mytool1.h" #include "mytool2.h" int main() { mytool1_print("hello mytool1!"); mytool2_print("hello mytool2!"); return 0; } /*mytool1.c*/ #include "mytool1.h" #include void mytool1_print(char *print_str) { printf("This is mytool1 print : %s ",print_str); } /*mytool1.h*/ #ifndef _MYTOOL_1_H #define _MYTOOL_1_H void mytool1_print(char *print_str); #endif /*mytool2.c*/ #include "mytool2.h" #include void mytool2_print(char *print_str) { printf("This is mytool2 print : %s ",print_str); }

/*mytool2.h*/ #ifndef _MYTOOL_2_H #define _MYTOOL_2_H void mytool2_print(char *print_str); #endif 首先了解一下make和Makefile。GNU make是一个工程管理器,它可以管理较多的文件。我所使用的RedHat 9.0的make版本为GNU Make version 3.79.1。使用make的最大好处就是实现了“自动化编译”。如果有一个上百个文件的代码构成的项目,其中一个或者几个文件进行了修改,make就能够自动识别更新了的文件代码,不需要输入冗长的命令行就可以完成最后的编译工作。make执行时,自动寻找Makefile(makefile)文件,然后执行编译工作。所以我们需要编写Makefile文件,这样可以提高实际项目的工作效率。 在一个Makefile中通常包含下面内容: 1、需要由make工具创建的目标体(target),通常是目标文件或可执行文件。 2、要创建的目标体所依赖的文件(dependency_file)。 3、创建每个目标体时需要运行的命令(command)。 格式如下: target:dependency_files command target:规则的目标。通常是程序中间或者最后需要生成的文件名,可以是.o文件、也可以是最后的可执行程序的文件名。另外,目标也可以是一个make执行的动作的名称,如目标“clean”,这样的目标称为“伪目标”。 dependency_files:规则的依赖。生成规则目标所需要的文件名列表。通常一个目标依赖于一个或者多个文件。 command:规则的命令行。是make程序所有执行的动作(任意的shell命令或者可在shell下执行的程序)。一个规则可以有多个命令行,每一条命令占一行。注意:每一个命令行必须以[Tab]字符开始,[Tab]字符告诉make此行是一个命令行。make按照命令完成相应的动作。这也是书写Makefile中容易产生,而且比较隐蔽的错误。命令就是在任何一个目标的依赖文件发生变化后重建目标的动作描述。一个目标可以没有依赖而只有动作(指定的命令)。比如Makefile中的目标“clean”,此目标没有依赖,只有命令。它所指定的命令用来删除make过程产生的中间文件(清理工作)。 在Makefile中“规则”就是描述在什么情况下、如何重建规则的目标文件,通常规则

Makefile规则

目录 1.简介 3 1.1.准备工作 3 1.2.Makefile介绍 3 1.3.规则简介 4 1.4.make工作原理 4 1.5.使用变量 5 1.6.简化命令 6 1.7.另一种风格 6 1.8.清理 7 2.Makefile 7 2.1.makefile名字 7 2.2.包含 8 2.3.‘MAKEFILE’变量 8 2.4.怎么重新生成makefile 8 2.5.重载makefile 9 3.规则 9 3.1.例子 9 3.2.规则的语法 9 3.3.通配符 10 3.3.1.通配符的缺陷 10 3.3.2.wildcard函数 11 3.4.目录搜索 11 3.4.1.‘VPATH’ 11 3.4.2.选择性搜索 12 3.4.3.使用自动变量 12 3.4.4.目录搜索和隐含规则 12 3.5.PHONY目标 13 3.6.FORCE目标 14 3.7.空目标 14 3.8.内建的特别目标 14 3.9.一个规则多个目标 15 3.10.一个目标多条规则 15 3.11.静态模式规则 16 3.11.1.语法 16 3.11.2.静态模式规则和隐式规则 17 3.12.双冒号规则 17 3.13.自动生成依赖关系 17 4.编写命令 18 4.1.回显 18 4.2.执行 19 4.3.并行执行 19 4.4.错误 19 4.5.中断make 20 4.6.递归使用 20 4.6.1.‘MAKE’变量 20 4.6.2.传递变量到子make 21 5.命令行参数 21 6.参考 25

6.1.指令 25 6.2.函数 26 6.3.自动变量 27 6.4.特别变量 29 GNU Make使用 Make 程式最初设计是为了维护C程式文件防止不必要的重新编译。在使用命令行编译器的时候,修改了一个工程中的头文件,怎么确保包含这个头文件的所有文件都得到编译?目前10机的版本生成是使用批处理程式,编译那些文件依赖于程式的维护者,在模块之间相互引用头文件的情况下,要将所有需要重新编译的文件找出来是一件痛苦的事情;在找到这些文件之后,修改批处理进行编译。实际上这些工作能让make程式来自动完成,make工具对于维护一些具有相互依赖关系的文件特别有用,他对文件和命令的联系(在文件改动时调用来更新其他文件的程式)提供一套编码方法。Make工具的基本概念类似于Proglog语言,你告诉make需要做什么,提供一些规则,make来完成剩下的工作。 1.简介 make工作自动确定工程的哪部分需要重新编译,执行命令去编译他们。虽然make多用于C程式,然而只要提供命令行的编译器,你能将其用于所有语言。实际上,make工具的应用范围不仅于编程,你能描述任和一些文件改动需要自动更新另一些文件的任务来使用他。 1.1.准备工作 如果要使用make,你必须写一个叫做“makefile”的文件,这个文件描述工程中文件之间的关系,提供更新每个文件的命令。典型的工程是这样的:可执行文件靠目标文件来更新,目标文件靠编译源文件来更新。 Makefile写好之后,每次更改了源文件后,只要执行make就足够了,所有必要的重新编译将执行。Make程式利用makefile中的数据库和文件的最后修改时间来确定那个文件需要更新;对于需要更新的文件,make执行数据库中记录的命令。 能提供命令行参数给make来控制那个文件需要重新编译。 1.2.Makefile介绍 Makefile文件告诉make做什么,多数情况是怎样编译和链接一个程式。 这里有一个简单的makefile,描述怎么编译链接由8个C文件和3个头文件组成的一个编辑器: edit : main.o kbd.o command.o display.o insert.o serach.o files.o utils.o cc ?o edit main.o kbd.o command.o display.o insert.o search.o files.o utils.o main.o : main.c defs.h cc ?c main.c kdb.o : kbd.c defs.h command.h cc ?c kbd.c command.o : command.c defs.h command.h cc -c command.c display.o : display.c defs.h buffer.h cc -c display.c insert.o : insert.c defs.hbuffer.h cc -c insert.c search.o : search.c defs.hbuffer.h cc -c search.c files.o : files.c defs.h buffer.h command.h cc -c files.c utils.o : utils.c defs.h cc -c utils.c

《嵌入式LInux设计与开发》练习题

练习题(一) 一、填空题 1.嵌入式系统一般包括_____________、嵌入式操作系统和。 2.Arm7内核采用的是体系结构。 3.S3C2410X芯片包含通道PWM定时器和____________通道内部计时器。 4.gcc的编译流程分为预处理、编译、和______________。 5.C语言中的预处理语句是以符号开头的。 6.多任务系统中有3个功能单位:任务、和____________。 二、选择题 1.下列操作系统中,具有Windows图形界面的是() A.VxWorks B.QNX C.Windows CE D.Linux 2.使vi编辑器处于可编辑状态的命令是()A.r B.p C.i D.b 3.下列选项中,能帮助用户生成makefile的工具是() A.gcc B.autotools C.gdb D.vi 4.可以使用TFTP通过网络下载文件的命令是()A.run B.tftpboot C.sleep D.mv 5.下列不属于Linux系统中线程的是()A.用户级现程 B.网络级线程 C.轻量级线程 D.内核级线程 6.下列选项中,常用于网络中不同机器之间的进程间通信的是() A.套接字 B.管道 C.信号 D.信号量 7.使用有关线程操作的函数时必须包含的头文件是() A. B. C. D.

8.TCP/IP参考模型包含几层()A.4 B.5 C.6 D.7 9.在TCP中,用于发送数据的函数是()A.bind() B.send() C.accept() D.recv() 10.下列选项中,不属于Linux系统的设备分类的是() A.字符设备 B.数据设备 C.块设备 D.网络设备 三、判断对错 1.Arm9采用的是5级指令流水线。()2.Vi编辑器有4种模式:标准模式、插入模式、命令行模式和可视模式。()3.NFS文件系统的目的是让不同的机器、不同的操作系统之间可以共享文件。() 4.一个线程可以包含多个进程。()5.TCP和UDP都是面向可靠的传输服务。()6.设备驱动程序可以使用模块的方式动态加载到内核去。() 7.标准I/O提供了3种类型的缓冲存储:全缓冲、行缓冲、不带缓冲。()8.交叉编译操作需要在安装交叉编译器后才能进行。() 9.Linux环境下不能同时打开多个终端。()10.进程具有动态性、交互性和异步性,但不具有并发性。() 四、问答题 1.简述并行通信和串行通信的概念及各自的特点。 并行通信是指利用多条数据传输线将一个字数据的各比特位同时传送。它的特点是传输速度快,适用于传输距离短且传输速度较高的通信。 串行通信是指利用一个传输线将数据以比特位为单位顺序传送。特点是通信线路简单,利用简单的线缆就可以实现通信,成本低,适用于传输距离长且传输速度较慢的通信。

中国房地产市场现状分析

1 中国房地产市场现状 我国房地产业逐渐发展成为国民经济中的支柱产业。然而随着国内的投资速度放缓,但是消费需求依然旺盛,供给结构不合理,导致房价虚高,空置率居高不下。虽然我国房地产投资额平均增长率达到20%以上,房地产销售额也以每年超出27%的速度增长,但一个无法回避的事实却是:中国房价总体已高得离谱。从中国社会科学院发布的《2007年中国房地产蓝皮书》来看,中国的房地产的增幅一直保持在20%以上,同时房地产价格一直呈显著上升的趋势。 2 房地产市场中博弈行为分析 2.1 房地产市场的内涵 房地产市场是一个很复杂的市场,是整个房地产产权交易的集合。房地产的交易过程就是房地产博弈过程,同时房地产的价格也是市场上主体之间博弈行为的结果。随着产权的受让方以一定的价格获取房地产产权,产权让渡方让渡房地产产权以获得相应的资金回报,交易的价格由此形成。 2.2 房地产市场的博弈主体 房地产市场中的博弈主体有很多,一般包括房地产开发商、银行、房地产的消费者、房地产相关专业人员、政府以及其他的金融机构。但是从价格的决定性因素角度来看,房地产市场的主要博弈主体还是开发商、政府和消费者。他们之间既有相互之间的博弈,也有同类主体之间的博弈,最终决定了房地产的价格。 3 博弈模型与博弈分析 3.1 地方政府与开发商的博弈分析 首先我们通过土地的供给与需求曲线来看一下土地价格为什么会如此高? 通过图形可以看出,土地的稀缺性,房屋开发量不足决定了房地产商的需求曲线会向右移动(由demand1曲线向右移动变成demand2曲线),如今房地产商不惜投入大笔的资金进行土地的储备,大势“攻城掠地”的行为已经证明了他们的需求曲线向右移动;与此同时,政府也把有限的土地资源拿到市场上进行拍卖和抛售,说明了土地的供给在不断减少,而政府对于农村郊区土地的开发和强制征用也证实了可用作开发的土地在减少,这样土地的供给曲线就会向左移(supply1曲线向左移动变成supply2曲线)。经过曲线的移动后,两条曲线的均衡点也由E1变成了E2,很容易得到土地的价格升高了。 模型分析:首先对于某一块土地,假设当地政府和开发商是信息完全的,双方都知道对于这个房地产项目开发的收益为多少,双方博弈的焦点就在于如何分配这个收益E。作为政府,这块土地的成本就是基本的行政费用,而作为房地产商,他的整个项目的成本主要包括地价、建安费、销售费用等等。假设土地市场的逆需求函数为p=a-b×Q(p),土地的固定成本为C,那么政府的收益函数为

Makefile下编写Helloworld的例子

什么是makefile?或许很多Windows的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得 要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专 业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile, 从一个侧面说明了一个人是否具备完成大型工程的能力。 因为,makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中, makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复 杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。 makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make 命令,整个工程完全自动编译,极大的提高了软件 开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如: Delphi的make,VisualC++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。 更新版本 hello.c程序 #include int main(){printf("Hello,World!\n");

return 0;}=== makefile开始=== Helloworld: hello.o gcc hello.o–o Helloworld Hello.o: hello.c hello.h gcc–MM hello.c gcc–c hello.c–o hello.o .PHONY: clean Clean: rm–rf*.o hellworld === makefile结束===

linux内核编译和生成makefile文件实验报告

操作系统实验报告 姓名:学号: 一、实验题目 1.编译linux内核 2.使用autoconf和automake工具为project工程自动生成Makefile,并测试 3.在内核中添加一个模块 二、实验目的 1.了解一些命令提示符,也里了解一些linux系统的操作。 2.练习使用autoconf和automake工具自动生成Makefile,使同学们了解Makefile的生成原理,熟悉linux编程开发环境 三、实验要求 1使用静态库编译链接swap.c,同时使用动态库编译链接myadd.c。可运行程序生成在src/main目录下。 2要求独立完成,按时提交 四、设计思路和流程图(如:包括主要数据结构及其说明、测试数据的设计及测试结果分析) 1.Makefile的流程图: 2.内核的编译基本操作 1.在ubuntu环境下获取内核源码 2.解压内核源码用命令符:tar xvf linux- 3.18.12.tar.xz 3.配置内核特性:make allnoconfig 4.编译内核:make 5.安装内核:make install

6.测试:cat/boot/grub/grub.conf 7.重启系统:sudo reboot,看是否成功的安装上了内核 8.详情及结构见附录 3.生成makefile文件: 1.用老师给的projec里的main.c函数。 2.需要使用automake和autoconf两个工具,所以用命令符:sudo apt-get install autoconf 进行安装。 3.进入主函数所在目录执行命令:autoscan,这时会在目录下生成两个文件 autoscan.log和configure.scan,将configure.Scan改名为configure.ac,同时用gedit打开,打开后文件修改后的如下: # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.69]) AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS]) AC_CONFIG_SRCDIR([main.c]) AC_CONFIG_HEADERS([config.h]) AM_INIT_AUTOMAKE(main,1.0) # Checks for programs. AC_PROG_CC # Checks for libraries. # Checks for header files. # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions. AC_OUTPUT(Makefile) 4.新建Makefile文件,如下: AUTOMAKE_OPTIONS=foreign bin_PROGRAMS=main first_SOURCES=main.c 5.运行命令aclocal 命令成功之后,在目录下会产生aclocal.m4和autom4te.cache两个文件。 6.运行命令autoheader 命令成功之后,会在目录下产生config.h.in这个新文件。 7.运行命令autoconf 命令成功之后,会在目录下产生configure这个新文件。 8.运行命令automake --add-missing输出结果为: Configure.ac:11:installing./compile’ Configure.ac:8:installing ‘.install-sh’ Configure.ac:8:installing ‘./missing’ Makefile.am:installing ‘./decomp’ 9. 命令成功之后,会在目录下产生depcomp,install-sh和missing这三个新文件和执行下一步的Makefile.in文件。 10.运行命令./configure就可以自动生成Makefile。 4.添加内核模块

2020房地产市场十大形势分析最新

2020房地产市场十大形势分析最新 一、2016年楼市整体较乐观 大部分业内人士对2016年房地产市场态度相对乐观。2016年楼市可能会比2015年差一点,但不会比2014年差。 首先,需求还在,从人口结构来讲,刚需虽然有所减少,但改善性蓬勃发展,从而弥补了刚需的略微下降; 其次,国家政策支持力度会越来越大; 第三,中国城市群格局会越来越清晰,如果房企布局合理,依旧会取得理想的销售业绩。 二、一二线城市销量将持平销售均价将上涨 2016年一二线城市房地产销售均价将上涨10%,而销量将持平,主要由于: 1)供应有限将推升销售均价,同时导致销量受限; 2)货币政策宽松将抵消宏观经济放缓的负面影响,刺激销售均价和销量; 3)土地成本较高的新增供应入市将结构性推升销售均价。 三、哪些城市有可能表现更好? 第一,深圳、苏州、南京、合肥、南昌、杭州、上海、北京和广州最有可能表现更好。这九个城市的库存去化周期将下降到10个月以下,显示库存水平将处于低位。加上2016年这九个城市的总可售资源大多将会减少(除深圳将增加4%以外),这些城市将供不应求,最可能有突出表现。

第二,看好的城市中心城市及其卫星城市。中心城市的情况比其他一二线城市要好。从长期来看,由于中心城市的集聚效应推动了 经济的升级和人口的流入,为房地产需求和价格提供了持续的支持,中心城市的房地产需求通常比较稳健。我们此处所指的中心城市位 于高铁网络的连接点上,并且是大都市区的经济中心,包括北京、 天津、石家庄、上海、杭州、南京、深圳、广州、成都、重庆、厦门、郑州、武汉和长沙。 第三,大都市区的三线城市较普遍低迷的三四线市场更看好。2009年至2014年,传统大都市区(环渤海、长三角和珠三角的三线 人口流入最为强劲。中心城市的卫星城市人口流入较强。各大都市 区人口流入最多的城市均是该地区中心城市的卫星城。在三线城市中,看好作为卫星城市的东莞、佛山、惠州、苏州、保定和廊坊。 四、不同城市、不同区域之间的分化将加剧 五、2016年依然会地王频出 六、改善性住房需求份额持续增加 2016年一、二线城市改善性住房需求有望表现强劲。 首先,现有的住房普遍户型较小,20%左右的住房质量很差。 其次,二孩政策的全面放开。 第三,与改善型住房需求相比,其他的两类住房需求(首次置业 需求和投资性需求)正趋于弱势。 从2015年成交结构来看,改善性需求已经在释放,2016、2017 年会保持比较好的一个成交规模。从2014年改善型需求成交已经超 过刚需,2016年改善性需求成交比例将进一步提高。 七、一线城市房价在短暂回稳后继续上升 2015年,深圳等地的房价涨的太凶,这种上涨是不可持续的。 但决定房价的购房者心理预期被广泛调高。讨论“30年租金不抵房价”已经没有意义,因为房子这时候已经不是使用品而是投资品,

Makefile超强经典教程

Makefile经典教程 0 Makefile概述 (2) 0.1关于程序的编译和链接 (2) 1 Makefile介绍 (3) 1.1 Makefile的规则 (4) 1.2一个示例 (4) 1.3 make是如何工作的 (6) 1.4 makefile中使用变量 (7) 1.5让make自动推导 (8) 1.6另类风格的makefile (9) 1.7清空目标文件的规则 (10) 2 Makefile总述 (11) 2.1 Makefile里有什么? (11) 2.2Makefile的文件名 (12) 2.3引用其它的Makefile (12) 2.4环境变量MAKEFILES (13) 2.5 make的工作方式 (13) 3 Makefile书写规则 (14) 3.1规则举例 (14) 3.2规则的语法 (14) 3.3在规则中使用通配符 (15) 3.4文件搜寻 (16) 3.5伪目标 (17) 3.6多目标 (19) 3.7静态模式 (20) 3.8自动生成依赖性 (22) 4 Makefile书写命令 (24) 4.1显示命令 (24) 4.2命令执行 (25) 4.3命令出错 (25) 4.4嵌套执行make (26) 4.5定义命令包 (29) 1

0 Makefile概述 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。 因为,makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。 makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。 现在讲述如何写makefile的文章比较少,这是我想写这篇文章的原因。当然,不同产商的make各不相同,也有不同的语法,但其本质都是在“文件依赖性”上做文章,这里,我仅对GNU的make进行讲述,我的环境是RedHat Linux 8.0,make的版本是3.80。必竟,这个make是应用最为广泛的,也是用得最多的。而且其还是最遵循于IEEE 1003.2-1992 标准的(POSIX.2)。 在这篇文档中,将以C/C++的源码作为我们基础,所以必然涉及一些关于C/C++的编译的知识,相关于这方面的内容,还请各位查看相关的编译器的文档。这里所默认的编译器是UNIX下的GCC和CC。 0.1关于程序的编译和链接 在此,我想多说关于程序编译的一些规范和方法,一般来说,无论是C、C++、还是pas,首先要把源文件编译成中间代码文件,在Windows下也就是.obj 文件,UNIX

Linux如何写makefile文件

Linux如何写makefile文件 关于程序的编译和链接 —————————— 在此,我想多说关于程序编译的一些规范和方法,一般来说,无论是C、C++、还是pas,首先要把源文件编译成中间代码文件,在Windows下也就是 .obj 文件,UNIX下是 .o 文件,即 Object File,这个动作叫做编译(compile)。然后再把大量的Object File合成执行文件,这个动作叫作链接(link)。 编译时,编译器需要的是语法的正确,函数与变量的声明的正确。对于后者,通常是你需要告诉编译器头文件的所在位置(头文件中应该只是声明,而定义应该放在 C/C++文件中),只要所有的语法正确,编译器就可以编译出中间目标文件。一般来说,每个源文件都应该对应于一个中间目标文件(O文件或是OBJ文 件)。 链接时,主要是链接函数和全局变量,所以,我们可以使用这些中间目标文件(O文件或是OBJ文件)来链接我们的应用程序。链接器并不管函数所在的源文件, 只管函数的中间目标文件(Object File),在大多数时候,由于源文件太多,编译生成的中间目标文件太多,而在链接时需要明显地指出中间目标文件名,这对于编译很不方便,所以,我们要给 中间目标文件打个包,在Windows 下这种包叫“库文件”(Library File),也就是 .lib 文件,在UNIX下,是Archive File,也就是 .a 文件。 总结一下,源文件首先会生成中间目标文件,再由中间目标文件生成执行文件。在编译时,编译器只检测程序语法,和函数、变量是否被声明。如果函数未被声明, 编译器会给出一个警告,但可以生成Object File。而在链接程序时,链接器会在所有的Object File中找寻函数的实现,如果找不到,那到就会报链接错误码(Linker Error),在VC下,这种错误一般是:Link 2001错误,意思说是说,链接器未能找到函数的实现。你需要指定函数的Object File. 好,言归正传,GNU的make有许多的内容,闲言少叙,还是让我们开始吧。 Makefile 介绍 ——————— make命令执行时,需要一个 Makefile 文件,以告诉make命令需要怎么样的去编译和链接程序。 首先,我们用一个示例来说明Makefile的书写规则。以便给大家一个感兴认识。这个示例来源于GNU的make使用手册,在这个示例中,我们的工程有 8

Linux下Makefile简单教程

目录 一:Makefile基本规则 1.1示例 1.2 隐式规则 1.3 伪目标 1.4 搜索源文件 二:变量 2.1使用变量定义变量值 2.2追加变量 三:条件判断 四:函数

Linux下Makefile总结 ——一步 MakeFile可以看做是一种简单的编程语言,其诞生的本质目的是实现自动化编译。 以Linux下gcc-c编译器为例,编译一个c语言程序需要经过以下几个步骤: 1.将c语言源程序预处理,生成.i文件; 2.预处理后的.i语言编译成汇编语言,生成.s文件; 3.汇编语言经过汇编,生成目标文件.o文件; 4.将各个模块的.o文件链接起来,生成一个可执行程序文件。 我们知道,在Visual C++6.0中,可以新建一个工程,在一个工程当中能够包含若干个c语言文件,则编译的时候直接编译整个工程便可。Linux下无法为多个c语言文件新建工程,但可以通过MakeFile实现它们的整合编译。 如上gcc-c编译步骤,如果使用Makefile则过程为: .C文件——>.o文件——>可执行文件 当然,Makefile中也加入了自己的设置变量方法与集成了一些函数,能够更有效地方便用户使用。 /**************************分隔符********************************/

一:Makefile基本规则 1.1示例 target ... : prerequisites ... command ... ... target也就是一个目标文件,可以是Object File,也可以是执行文件。prerequisites就是,要生成那个target所需要的文件或是目标。command也就是make需要执行的命令。(任意的Shell命令) 为了方便理解,我们来看一个示例: /*Makefile示例*/ edit : main.o kbd.o command.o display.o / insert.o search.o files.o utils.o gcc -o edit main.o kbd.o command.o display.o / insert.o search.o files.o utils.o main.o : main.c defs.h #生成main.o gcc -c main.c

中国房地产市场分析状况

中国房地产市场分析 目录 第一部分:中国房地产业的发展现状 一、目前的总体发展态势 (一)房地产开发总量及增长率 (二)销售总量及变化 1、销售增长速度放缓,出现有效需求不足端倪 2、存量住房市场火爆 (三)销售价格变动状况 1、总体发展态势 2、第一第二季度房地产销售价格分析,重点以北京、上海为例 二、地区发展态势 三、房地产行业效益情况 1、2001年上市公司效益分析。 2、2002年房地产上市企业业绩预测 四、目前的行业运行环境 第二部分:未来3到5年内房地产行业的发展趋势研究 一、政策因素的影响 1、土地供应政策的变化 2、预售条件及开发贷款门槛的提高 3、货币化分房政策的落实 4、经济适用房政策的推行 二、经济发展因素的影响分析 1、GDP与人均GDP的高速发展对房地产行业的影响 1、1、未来10年内我国GDP的增长情况预测 1、2、GDP的增长将带动“十五”期间住房消费的增加 1、2、1人均GDP的增长将增大住房消费支出 1、2、2为了实现GDP的既定增长目标,必然要发挥房地产对经济的杠杆作用 2、规模城镇化对房地产的推动。 3、西部大开发的积极影响 4、加入WTO对房地产业的长期利好 5、奥运带动城市建设,从而促进房地产业的发展。 三、、行业相关因素分析 1、技术因素变革(交通、通讯)的影响 1、1、交通技术的革新和交通工具的完善 1、2、现代通讯技术的进步 1、3、节能与供热方式改革。

1、4、节水、节地和治理污染。 1、5、住宅一次装修到位 2、自然环境因素的影响 3、消费者文化品位与生活方式的提升对房地产的影响。 第三部分、对全国房地产市场前景的总体判断 一、发展态势总体判断 (一)总体展望------三个判断 1、我国房地产发展还处于初级阶段,发展空间很大 2、我国房地产业仍将处于高速发展阶段 3、未来三年房地产业将在高位上进行调整,商品房销售面积增幅将有所降低,估计,未来三年增幅在15%左右 (二)未来三年房地产业运行格局 1、市供需两旺,但供大于求,空置房将增加 2、市场体系逐步完善 3、住房金融快速发展 4、住宅投资性消费将进一步增长 5、行业集中度将提高 6、区域性房地产泡沫已经产生 二、市场需求分析专题 (一)市场消费需求观念的变化 (二)未来几年房地产潜在市场需求的预测 1、“十五”时期房地产市场投资总量的预测。 2、“十五”时期房地产市场潜在市场需求的预测 3、未来几年房地产消费主要群体特征 (三)消费者有效需求的变化方向 三、房地产周期性研究专题 四、中国房地产业的市场空间与竞争状况预测专题 (一)市场竞争主体的增多 1、外资房地产开发商的涌入。 2、地涌现出新的竞争主体。 (二)跨区域竞争加剧 (三)土地储备资源的竞争加剧 1、新的土地使用政策导致土地的供应量可能会供不应求 2、入世使得土地市场竞争加剧 (四)对消费者群体有效需求的竞争加剧 (五)市场营销和管理方面的竞争。 第四部分:房地产行业发展的风险和挑战专题 一、政策风险 1、土地转让制度的改变,加大企业开发成本。 2、房地产企业贷款政策的改变,使得企业融资渠道受阻

相关文档
最新文档