软件编译安装小结

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

相关推荐

  • 运筹帷幄之中,决胜与千里之外!

           运筹帷幄之中,决胜与千里之外,决定改变一生。        自从2016年年后学校要求产参加毕业实习,但对linux一窍不通的我,阴差阳错的被一家网络公司给录取了。        安排在一家企业做驻场运维工程师,刚去驻场的时候并没有给我分配相应的工作只是给了一些关于数据库,网络,和系统的一些资料,要求进行自学。我想了想,就决定选择了系统进行了解…

    2018-03-26
  • 关于IO的同步,异步,阻塞,非阻塞

    上次写了一篇文章:Unix IO 模型学习。恰巧在这次周会的时候,@fp1203 (goldendoc成员之一) 正好在讲解poll和epoll的底层实现。中途正好讨论了网络IO的同步、异步、阻塞、非阻塞的概念,当时讲下来,大家的理解各不相同,各执己见。搜索了网络上的一些文章,观点也各不相同,甚至连wiki也将异步和非阻塞当成一个概念在解释。  &…

    Linux干货 2015-04-02
  • 常用命令总结

    ifconfig查看IP地址 date查看日期和时间 cd跳转到任何目录 useradd新建一个普通用户 passwd给用户设置密码 poweroff   halt    关机 reboot  重启 cal  查看日历 cal -y 查看一年日历 env  export&nbsp…

    Linux干货 2017-04-04
  • Linux平台的4个最佳开源代码编辑器

    原文出处: Abhishek   译文出处:Linux中国 su-kaiyao   正在寻找Linux平台最棒的代码编辑器?如果你询问那些很早就玩Linux的人,他们会回答是Vi, Vim, Emacs, Nano等。但是,我今天不讨论那些。我将谈论一些新时代尖端、漂亮、时髦而且十分强大, 功能丰富…

    Linux干货 2015-03-02
  • Linux系统命令使用格式已经如何查看帮助

    在Linux 系统中有非常多的命令一般的命令格式:“COMMAND OPTIONS ARGUMENTS” 下面有一些基础命令可以体验下命令的基本格式用法 ifconfig命令    作用: 配置网络接口,查看网络接口信息    基本语法:     ifconfig  […

    Linux干货 2016-08-15
  • bash进阶学习ing

    使用read命令来接受输入使用read来把输入值分配给一个或多个shell变量: -p 指定要显示的提示 -t TIMEOUT read 从标准输入中读取值,给每个单词分配一个变量所有剩余单词都被分配给最后一个变量read -p “Enter a filename: “ FILE 条件选择if语句选择执行:注意: if语句可嵌套单分支if 判断条件: the…

    Linux干货 2016-08-21