读书笔记---编译程序中的三板斧
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://coolerfeng.blog.51cto.com/133059/88161 |
平时安装软件安装多了,总是少不了./confgiure;make;make install 这三条命令 然而,软件安装完毕,各位有想过这几条命令的意义么? 今天早上看书的时候,谈到C编译程序及调试,于是将书中所说总结出来,以供大家分享吧。 通常一个源码包解压缩以后,我们ls一下,能看到configure文件,通常这是一个可执行脚本文件。由这个脚本文件加上参数,经过运行,生成Makefile文件和其他的一些必要的文件 如果ls没有发现configure文件的话,你第一步执行./configure是没用的。只会得到一条shell返回的错误提示。那么没有configure的程序我们要如何编译呢,通常我们可以看README和INSTALL文件,里面会提示我们用一些其他的程序来生成configure文件。 比如perl脚本写的Makefile.pl,可以用perl Makefile.pl来生成Makefile。 有些程序在执行之前可能需要打上补丁,通常可以找到一些patch文件, 常用 patch -p1 < filename.patch的方法给源码打上补丁。 configrue的开始基本上都是检查编译环境,如gcc编译器的位置,各种库和头文件的位置等等。当检测遇到错误就会停下来。并输出错误信息。对于redhat,建议在安装系统的时候就把开发工具等都全部选中,这样避免编译的时候临时去安装需要的编译工具和一些缺少的库。 有时候我们的系统少一些其他的库,是导致我们编译失败的原因。默认情况下,我们都是运行make来调用系统工具对C代码进行编译。对于某些软件,make后面的参数很长,也比较复杂,这些参数都是什么意思呢。 用postfix举例吧 make -f Makefile.init makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include/mysql -DUSE_SASL_AUTH -I/usr/local/include/sasl' 'AUXLIBS=-L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lm -L/usr/local/lib -lsasl2' 这一大串输入起来是不是很费劲。分别解释一下吧 -I路径 表示在指定路径搜索头文件 -lz 表示搜索libz.so或者libz.a,这里用了缩写的形式,只写了一个z,同理lmysqlclient就表示libmysqlclient.so/libmysqlclient.a CCARGS表示宏。用于替换makefile中的默认值 make的过程中会生成很多中间文件*.o,最后连接成为可执行文件。make一般时间比较长,取决于CPU的性能了。 接下来一般就是make install了,可是为什么是install参数呢,可以man make看一下,你会发现并没有install这个参数,那么这个参数是哪里来的呢 如果你还没有删除刚才的文件,你可以用编辑器打开Makefile看一下。这里么定义了很多目标字段,格式如下 targert: prerequisite-list TAB construction-commands 这里的TAB表示一个制表符号,也就是几个像空格一样的空白。 用查找命令从最后找一下,你能找到install开头的目标字段,如果你熟悉程序,你会发现,安装的动作就是从这里开始的。 默认情况下make后面没有指定字段,就从第一个字段开始。当make完成后,我们再次执行make命令是没有效果的,会提示你没有什么可以执行了。因此我们指定一个程序中定义的字段install,来执行特定的安装动作。 对于某些小程序来说,make可能直接就完成了编译和安装的动作,而有些程序是用make all来完成的。对于一些大型软件,make install之后还可以执行make install-config来安装配置文件等等。现在你明白为啥是make install而不是make love了吧。哈哈 编译失败,需要清理代码树,通常我们用make clean或者make distclean,毫无疑问,这两个参数也是在Makefile中定义好了 如果Makefile中定义了uninstall参数,那么该程序还能卸载。 就到此为止吧。对于编译还有一些其他的开关,有兴趣可以看看相关的开发的书。 本文出自 “风吹云动” 博客,请务必保留此出处http://coolerfeng.blog.51cto.com/133059/88161 本文出自 51CTO.COM技术博客 |



coolerfeng
博客统计信息
热门文章
最新评论
友情链接
