linux软件开发笔记
(2010-10-02 15:41:58)
标签:
linux软件开发文档makemakefileit |
分类: ubuntu--时代要求开源 |
-
文件组织
原则:头文件、代码、文档、数据文件和图形文件分开放到不同的目录下。
-
实用工具make
为了避免大型程序在修改了个别文件后全部编译所有文件,可以使用make完成编译。make能够在一个文件被修改后,自动处理依赖于这个文件的其他文件,使得所有的衍生文件都处于最新的状态。Makefile作为make的输入文件,详细规定了各个文件的依赖关系。请看下面的例子:
#以#开头的行表示注释。
#Makefile是一个包含一系列规则的文本文件。每个规则定义一个目标所依赖的对象和处#理命令。每个规则由两部分组成:依赖关系和处理命令。其中第二部分可以省略。当更新#一个指定的目标是,make会先检查并且在必要是更新它所依赖的每个对象,然后将目标#文件的修改时间一次与每个依赖对象文件的修改时间进行比较,如果任何一个依赖对象比#目标新,则执行处理命令来更新目标。由于检查依赖关系时,所依赖的对象会被先检查,#而这些对象又可能依赖其他的对象,从而递归下去,形成一个复杂的树形结构。
#这里先定义一个叫做all的默认目标(target)。它依赖于两个文件,一个是编译产生的#可执行文件,叫做main,另一个是Tex文件编译产生的PDF文件,叫main.pdf。这#里只有依赖关系,没有处理命令。当输入命令”make all“时,会使make去检查,更新#main,main.pdf。
all:main main.pdf
#下面是文件main的依赖关系及处理(链接)命令。注意,所有包含处理命令的行必须以#<Tab>开始。部分依赖关系可以从头文件的包含关系中得到。
main:main.o solver.o parameter.o
gcc -o main main.o solver.o parameter.o
#定义关于目标文件main.o的规则。
main.o:main.c parameter.h
gcc -g -c main.c
#定义solver.o和parameter.o规则
solver.o:solver.c solver.h parameter.h
gcc -g -c solver.c
parameter.o:parameter.c parameter.h
gcc -g -c parameter.c
#当数据文件被修改时,parameter.c中的相应部分也需要进行修改。这里显示一条信息#提示用户手工修改parameter.c。
parameter.c:data1.dat data2.dat
@echo “Data files modified, please revise \”parameter.c\”.”
#main.pdf是用dvipdf命令处理main.dvi得到的:
main.pdf:main.dvi
dvipdf -o main.pdf main.dvi
#而main.dvi文件则是用latex处理main.tex产生的:
main.dvi:main.tex
latex main.tex
#目标clean用于清除所有衍生文件。
clean:
rm -f main *.o main.pdf main.dvi main.aux main.log
将上述实例保存到程序所在的目录下,文件名就叫Makefile。然后,只要在命令行上执行make all便可生成可执行程序main和main.pdf。make [文件名]可直接指定检查更新目标。当然对于格式一样的依赖关系,make可用宏简化处理,这里不做展开。
3.文档开发和维护
Doxygen是适用于C语言的文档开发工具。Doxygen要求程序的注释符合一定的格式(内容不在这里展开)。使用步骤是,编写程序和格式化的注释,运行doxygen -g,生成配置文件的模板Doxyfile,直接编辑此文档可获得所需配置文件。将配置文件放在源文件所在目录,在目录下输入doxygen,便会根据注释生成latex和html格式的文档,存放于doc文件夹中。
4.版本管理和协同工作
版本管理可用CVS和Subversion。使用CVS必须连接到提供CVS服务的服务器上。