软件编译安装小结

简介:

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


configure和cmake的比较

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

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

1
. /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 执行操作:

1
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 文件,有以下几个预设的目标可供使用,其中几个重要的简述如下:

1
2
3
4
5
6
7
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 文件

1
2
make  clean
make  distclean

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


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

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

1
2
3
4
5
6
7
8
9
# 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,更新更新了若干目录的时间戳!

1
2
3
4
5
6
7
8
9
10
-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



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










本文转自 aaao 51CTO博客,原文链接:http://blog.51cto.com/nolinux/1439073,如需转载请自行联系原作者

目录
相关文章
|
1天前
|
Java Linux 开发工具
linux如何编译安装源码包软件
源码包软件是包含源代码的软件包,常见于Linux和BSD系统,如fcitx和Lumaqq。开源软件需满足源代码可见且有宽松许可,如GPL。安装源码包通常涉及解压、编译和安装步骤,使用`tar`命令解包,通过`./configure`, `make`, `make install`进行编译安装。软件源码允许定制和二次开发,但须遵循许可协议。安装前确保安装了必要的开发工具和库。对于perl和python程序,直接使用perl或python命令安装。推荐使用系统软件包管理工具如RPM、yum或apt进行管理,以简化流程。
7 0
|
2月前
|
缓存 Linux Shell
【Linux工具篇】软件包管理器yum
【Linux工具篇】软件包管理器yum
53 1
|
6月前
|
弹性计算 Ubuntu 编译器
一些优秀的软件的安装步骤总结
一些优秀的软件的安装步骤总结
44 0
|
4月前
|
缓存 关系型数据库 Linux
linux(三十八)编译安装软件与使用yum源安装软件
linux(三十八)编译安装软件与使用yum源安装软件
56 0
|
6月前
|
安全 C++ Windows
如何编译安装最新版本orangefs
如何编译安装最新版本orangefs 2.10.0
90 0
如何编译安装最新版本orangefs
|
9月前
|
Linux PHP
Linux环境下安装pecl工具,PHP扩展便捷安装
Linux环境下安装pecl工具,PHP扩展便捷安装
383 0
|
缓存 前端开发 Linux
安装及管理程序(RPM、YUM、源码编译安装)(下)
1 Linux 应用程序基础 1.1 应用程序与系统命令的关系
117 1
|
Ubuntu Linux Shell
安装及管理程序(RPM、YUM、源码编译安装)(上)
1 Linux 应用程序基础 1.1 应用程序与系统命令的关系
136 0

热门文章

最新文章