软件编译安装小结

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。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
下一篇 2016-08-15

相关推荐

  • CentOS7下利用rsyslog+loganalyzer配置日志服务器及Linux和windows客户端配置

    随着机房内的服务器和网络设备增加,日志管理和查询就成了让系统管理员头疼的事。 系统管理员遇到的常见问题如下: 1、日常维护过程中不可能登录到每一台服务器和设备上去查看日志; 2、网络设备上的存储空间有限,不可能存储日期太长的日志,而系统出现问题又有可能是很久以前发生的某些操作造成的; 3、在某些非法入侵的情况下,入侵者一般都会清除本地日志…

    2017-03-15
  • ansible初识

    主要组成部分,相关配置文件

    2018-01-21
  • N24_星空学习宣言

    学习是一种投资,既然投资了就不能亏损,努力学习,做一个学习界的巴菲特!

    Linux干货 2016-10-24
  • 数据结构-栈和队列

    1.栈 1.1 栈的定义 栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。如下所示: 结论:后进先出(Last In First Out),简称为LIFO线性表。 栈的基本运算有六种: 构造空栈:InitStack(S)、 判栈空: StackEmpty(S)、 判栈满: StackFull(S)、 …

    Linux干货 2015-04-07
  • FHS文件系统各目录功能

    FHS文件系统各目录功能 摘要: 本文主要介绍Linux的文件组织目录结构。 一、Linux 目录结构 在讲 Linux 目录结构之前,你首先要清楚一点东西,那就是 Linux 的目录与 Windows 的目录的区别,或许对于一般操作上的感受来说没有多大不同,但从它们的实现机制来说是完全不同的。 一种不同是体现在目录与存储介质(磁盘,内存,DVD 等)的关系…

    Linux干货 2016-10-18
  • 第十八周博客作业

    1、为LNMP架构添加memcached支持,并完成对缓存效果的测试报告; 操作系统: CentOS 7.210.0.0.51 nginx+php+mysql10.0.0.52 memcached 一. 环境准备: 搭建LNMP编译安装环境 1. 配置163的yum源和阿里云的epel源 [root@localhost ~]# mv /etc/yum.rep…

    2017-07-12