Linux程序设计第九章

来源:互联网 发布:淘宝开店卖q币 编辑:程序博客网 时间:2024/06/05 03:20
今天听说周立功的考试巨难?没有机会去尝试尝试 ,真是太遗憾了。今天学习了Linux程序设计第九章,开发工具.
主要包括:
*make命令和makefile文件
*RCS和CVS系统对源代码进行控制
*编写手册页
*使用patch和tar命令来发布软件
*开发环境

1.make
make程序本身有许多选项,其中最常用的为以下3个.
-k :他的作用是让make命令在发现错误时仍然继续执行.
-n :让make命令输出将要执行的操作步骤,而不真正执行这些操作
-f <filename> :告诉make命令将哪个文件作为makefile文件.如果没有这个选项,make命令将寻找makefile或Makefile名字的文件.

通常,我们将地一个目标定义为all,然后在列出其他从属目标.这个约定,可以让make在缺乏目标时,默认创建地一个目标.(make在没有目标时,总是创建第一个目标)

依赖关系和规则.这里有一个很奇怪的语法,就是空格和TAB是有区别的.这你敢信?!没一个规则所在的行必须以tab开头.用空格将会出错..其次,每条规则后面,不要出现空格

makefile 用# 来表示注释.
其中makefile也有宏定义,主要还是为了便于修改.

makefile中可以定义clean目标.
如 clean :
         -rm ....
clean后面没有依赖关系,这个目标在执行make命令的时候不会执行,而make clean将总会执行这个目标.其中 - 号表示忽略rm的错误,比如说我们删除一个并不存在的文件.就会出错.

假设我们创建一个install目标:如:
install : myapp
@if [-d $(INCLUDE) ] ; \
    then \
    cp myapp $(INCLUDE); \
    chmod a+x $(INCLUDE)/myapp; \
   fi
这里每一个规则的执行,都将调用一个shell,所以必须在上面使用一个\命令.让所有shell脚本命令在逻辑上处于同一行.并作为一个整体传递给一个shell执行.这个命令以@开头,表示make在执行这些规则之前不会在标准输出显示命令本身.
但这个这里,这些shell脚本并没有检测前一个命令是否成功,如果这点很重要,我们可以用一个&&连接每一步操作.

当然,make有很多的内置规则,这给我们带来了很大的方便.

用make管理函数库.
假设我们这么做:
.c.a:
    $(CC) -c $(CFLAGS) $<
    $(AR) $(ARFLAGS) $@ $*.o
宏$(AR)和$(ARFLAGS)的默认值通常分别是命令ar和rv,这个语法将告诉make,要想从.c文件得到.a文件,他必须应用上面两条规则.
1.他必须编译源文件以生成目标文件
2.他用ar命令将新的目标文件添加到函数库中.


接下来,有两个相当有意思的命令选项.
1.是make -jN , j表示job,这选项表示make 同时执行N条命令.
2.第二个就相当有用了,如果你的文件特别特别特别多,里面各种包含头文件,文件包含的关系,要理清简直就是噩梦.怎么办?gcc的 -MM选项帮你搞定.
假如我们输入gcc -MM main.c 2.c 3.c,他将给你输出下面的依赖关系

main.o: main.c a.h
2.o: 2.c a.h b.h
3.o: 3.c b.h c.h
是不是相当给力...

这里还有RCS(针对于个人项目),和CVS(针对于团队合作).这两个非常有用的源代码项目控制系统.他们能够跟中并记录下源文件的每一次改动.但是这里,我们先不关注他.因为关注了我也记不住...

然后这里还有编写手册页的工具,这个在目前,也没有什么关注的必要,做做小东西而已,又不发布..
也有教你怎么发布一个软件的...我表示压力很大....我发布不了.等用到的时候在来看吧.做个标记.



OK,结束我们的第九章, 总觉得,有点不对劲.看书的速度太慢了,当然了,前提也是因为课慢慢变多了,如今已经不逃课啦.~~都是专业课了,比较感兴趣,不想逃了,~~
做个好学生.


加油加油!!!












原创粉丝点击