软件编译安装小结

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://nolinux.blog.51cto.com/4824967/1439073

    本文主要针对 configure 和 cmake 做一个介绍以及我们重新配置编译参数文件时,都需要做哪些清理操作 做一个说明。


configure和cmake的比较

    configure 是一个sh脚本文件,它负责处理大量的幕后工作,包括检测操作系统内核和已经安装的软件,参数的解析,中间目录的生成以及根据各种参数生成一些C源码文件、Makefile文件等。它提供了非常多的参数选项供我们使用,我们可以通过这些参数选项来控制软件的安装目录、数据文件路径、配置文件路径,以及一些特殊选项如–with-pcre等,你可以通过允许 ./configure –help 察看详细的说明帮助。

    下面是一个典型的 configure 执行操作:

./configure

    通过执行 configure 脚本后,会产生的 Makefile 文件等,Makefile 文件为后续的 make 和 make install 提供了必要的指令和参数

    configure 产生的另外两个文件,config.log 和 config.status 可以协助我们调试编译的配置过程。



    CMake 是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。它能够输出各种各样的 makefile 或者 project 文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CmakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix/Linux 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依照一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。  

       CMake 可以编译源代码、制作程式库、产生适配器(wrapper)、还可以使用任意的顺序建构执行档。CMake 支援 in-place 建构(二进档和源代码在同一个目录树中)和 out-of-place 建构(二进档在别的目录里),因此可以很容易从同一个源代码目录树中建构出多个二进档。CMake 也支援静态与动态程式库的建构。

    "CMake"这个名字是“cross platform make”的缩写。虽然名字中含有“make”,但是CMake和Unix上常见的“make”系统是分开的,而且更为高阶。

    下面是一个典型的 CMake 执行操作:

cmake .

    通过执行cmake .,会产生 Makefile 文件,Makefile文件为后续的make 和 make install 提供了必要的指令和参数。

    cmake之后,还会产生一个 CMakeFiles 目录。在该目录下,放置了若干文件,其中 CMakeError.log 和 CMakeOutput.log 文件可以协助我们调试编译的配置过程。 



Makefile介绍

       Makefile 文件定义了一系列的规则,通过这些规则指定了哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。因为 makefile 就像一个Shell脚本一样,其中也可以执行操作系统的命令。

       Makefile 带来的好处就是"自动化编译",一旦写好,只需要一个 make 命令,整个工程完全自动编译,极大的提高了软件开发的效率。


make介绍

    make 是一个命令工具,是一个解释 makefile 中指令的命令工具。一般来说,大多数的集成开发环境(IDE) 都有这个命令,比如:Delphi 的 make,Visual C++的 nmake ,Linux 下 GNU 的 make。可见,makefile 都成为了一种在软件工程方面的编译方法。

    利用 configure/cmake 所产生的 Makefile 文件,有以下几个预设的目标可供使用,其中几个重要的简述如下:

make           # 根据 Makefile 文件编译软件工程,并生成目标文件以及最终的二进制文件
make install   # 根据 Makefile 文件将软件工程(比如nginx、mysql)部署到指定的安装目录,包括相关目录的建立和二进制文件、配置文件的复制
make all       # 与 make 效果类似,不过它会输出所有的调试信息,包括 make 构造依赖关系链、重建目标过程等输出信息
make clean     # 清除编译产生的可执行文件及目标文件(object file,*.o)
make distclean# 与make clean效果类似,但同时也将 configure 产生的文件全部删除掉,包括Makefile文件
make dist      # 产生发布软件包文件(即distribution package),它会将可执行文件及相关文件打包成一个名字类似"PACKAGE-VERSION.tar.gz"的压缩文件用来作为发布软件的软件包。其中,PACKAGE和VERSION 是我们在 configure.in 中定义的 AM_INIT_AUTOMAKE(PACKAGE, VERSION)。
make distcheck # 与 make dist 效果类似,增加了检查包装后的压缩文件是否正常的功能。这个目标除了把程序和相关文件包装成以 tar.gz 后缀结尾的文件以外,还会自动把这个压缩文件解开,然后执行 configure,并且进行 make all 的动作,确认编译无误后,会显示这个tar.gz文件可供发布了。这个检查非常有用,检查过关的包,基本上可以给任何一个具备GNU开发环境-的人去重新编译

重新配置配置编译参数时,需要清除哪些文件?

一、如果你使用 configure 去生成 Makefile 文件

make clean
make distclean

    执行如上两条命令,即可完成清除!


二、如果你使用 cmake 去生成 Makefile 文件

    这里推荐写一个shell脚本来实现清理功能,这样子下次就省力一点,无需再做多余操作!

# cat make_file.sh 
#!/bin/bash
# clear cmake file shell
echo "delete cmake cache begin..."
rm -rf ./cmake_install.cmake
rm -rf ./CMakeFiles
rm -rf ./Makefile
rm -rf ./CMakeCache.txt
echo "delete cmake cache end..."

    在实际环境中,我们执行cmake之后,会在源码的根目录产生 9个新文件 和 1个目录文件 CMakeFiles,更新更新了若干目录的时间戳!

-rw-r--r--. 1 root root 88 Jun 3 22:09 VERSION.dep
-rw-r--r--. 1 root root 5827 Jun 3 22:09 make_dist.cmake
-rw-r--r--. 1 root root 5815 Jun 3 22:09 info_macros.cmake
-rw-r--r--. 1 root root 4795 Jun 3 22:09 CPackConfig.cmake
-rw-r--r--. 1 root root 5724 Jun 3 22:09 CPackSourceConfig.cmake
-rw-r--r--. 1 root root 48488 Jun 3 22:09 CMakeCache.txt
-rw-r--r--. 1 root root 53439 Jun 3 22:09 Makefile
-rw-r--r--. 1 root root 6528 Jun 3 22:09 cmake_install.cmake
-rw-r--r--. 1 root root 1279 Jun 3 22:09 CTestTestfile.cmake
drwxr-xr-x. 11 root root 4096 Jun 3 22:09 CMakeFiles

    以上就是本文的内容!希望对大家有所帮助,如果哪里有问题,请及时告知!

转自:http://nolinux.blog.51cto.com/4824967/1439073

原创文章,作者:s19930811,如若转载,请注明出处:http://www.178linux.com/1958

(0)
s19930811s19930811
上一篇 2016-08-15 12:12
下一篇 2016-08-15 12:12

相关推荐

  • MapReduce数据流

    Hadoop的核心组件在一起工作时如下图所示: 图4.4高层MapReduce工作流水线   MapReduce的输入一般来自HDFS中的文件,这些文件分布存储在集群内的节点上。运行一个MapReduce程序会在集群的许多节点甚至所有节点上运行mapping任务,每一个mapping任务都是平等的:mappers没有特定“标识物”与其关联。因此,任意的map…

    Linux干货 2015-05-13
  • 系统基础之权限管理作业题

    1.问题:  在/data/testdir里创建的新文件自动属于g1组,组g2的成员如: alice能对这些新文件有读写权限,组g3的成员如:tom只能对新文件有读权限,其它用户(不属于g1,g2,g3)不能访问这个文件夹。 [root@wen-7 testdir]# mkdir -p /data/…

    Linux干货 2016-08-04
  • 文件权限管理

    一 、文件属性介绍 1、linux文件权限分为读(read)、写(write)、执行(excute)三种,主要针对三类用户进行定义:ouwer:属主(u) 、group(g):属组、 other(o):其他人。文件的权限组合可以分为两种,一种是由三个字母r 、w、 x组成,一种是由数字组成4、2、1,它们代表的意思是r = 4 表示读权限、w = 2表示写权…

    Linux干货 2016-08-08
  • linux文件基本权限、默认权限、隐藏权限和ACL权限

    基本权限    文件属性rwx     每个文件当用ls -l查看时,都会显示文件的详细属性信息,其中在排在首位的共有10位字符信息     例如 -rw-r–rw-. 1 root root …….. 共有10位,第一位代表的是文件的类型,后边9位表示的是文件的…

    Linux干货 2016-08-04
  • 0801课堂练习与作业

    1、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中      cat /etc/issue | tr 'a-z' 'A-Z' > /tmp/issue.out 2、将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文…

    Linux干货 2016-08-02
  • Python函数式编程指南(二):函数

    这是此系列的第二篇,试图说明在Python中如何更好地使用函数并引导诸位使用函数式的思维进行思考。掌握并应用这些内容,就已经是至少形似的函数式风格的代码了,至于思维么,这个真靠自己。 作者水平有限,如有错漏之处还请指出;转载请注明原作者和原地址:) 2. 从函数开始 2.1. 定义一个函数 如下定义了一个求和函数: def add(x, y): return…

    Linux干货 2015-03-11