本文共 3482 字,大约阅读时间需要 11 分钟。
本文主要针对 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 cleanmake distclean
执行如上两条命令,即可完成清除!
二、如果你使用 cmake 去生成 Makefile 文件
这里推荐写一个shell脚本来实现清理功能,这样子下次就省力一点,无需再做多余操作!
# cat make_file.sh #!/bin/bash# clear cmake file shellecho "delete cmake cache begin..."rm -rf ./cmake_install.cmakerm -rf ./CMakeFilesrm -rf ./Makefilerm -rf ./CMakeCache.txtecho "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.cmakedrwxr-xr-x. 11 root root 4096 Jun 3 22:09 CMakeFiles
以上就是本文的内容!希望对大家有所帮助,如果哪里有问题,请及时告知!
转载地址:http://pkwjx.baihongyu.com/