Linux命令详解:./configure、make、make install

前言:上一篇博文介绍了Linux项目自动化构建工具-make/Makefile,此篇博文我们详细说一下./configure、make、make install这三个命令。

1、基本概念

1、./configure 配置,是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,是不是需要CC或GCC,它是个shell脚本。configure 脚本负责在使用的系统上准备好软件的构建环境。确保接下来的构建和安装过程所需要的依赖准备好,并且搞清楚使用这些依赖需要的东西。

2、make 构建,用来编译,它从Makefile中读取指令,然后编译。下载的源码包一般没有一个最终的 Makefile 文件,一般是一个模版文件 http://Makefile.in 文件,然后 configure 根据系统的参数生成一个定制化的 Makefile 文件。这个过程会执行在 Makefile 文件中定义的一系列任务将软件源代码编译成可执行文件。

3、make install安装,它也从Makefile中读取指令,安装到指定的位置。make install 命令就是将可执行文件、第三方依赖包和文档复制到正确的路径。

2、命令详解

1、configure命令

这一步一般用来生成 Makefile,为下一步的编译做准备,你可以通过在 configure 后加上参数来对安装进行控制,比如代码:./configure --prefix=/usr 意思是将该软件安装在 /usr 下面,执行文件就会安装在 /usr/bin (而不是默认的 /usr/local/bin),资源文件就会安装在 /usr/share(而不是默认的/usr/local/share)。同时一些软件的配置文件你可以通过指定 –sys-config= 参数进行设定。有一些软件还可以加上 –with、–enable、–without、–disable 等等参数对编译加以控制,你可以通过允许 ./configure –help 察看详细的说明帮助。

--prefix

安装到目录,选项的另一个好处是卸载软件或移植软件。当某个安装的软件不再需要时,只须简单的删除该安装目录,就可以把软件卸载得干干净净;移植软件只需拷贝整个目录到另外一个机器即可(相同的操作系统)。

--bindir

指定二进制文件的安装位置,这里的二进制文件定义为可以被用户直接执行的程序。

--enable-static与--enable-shared

--enable-static:生成静态链接库

--enable-shared:生成动态链接库

--with-:用于启用或禁用特定功能或模块。例如,--with-ssl表示启用SSL支持,--without-gui表示禁用图形界面。

--enable-:用于启用或禁用特定功能或模块。与--with-选项类似,但更常用于启用或禁用编译选项。

--disable-:用于禁用特定功能或模块。与--enable-选项相反,用于禁用编译选项。

2、make

这一步就是编译,大多数的源代码包都经过这一步进行编译(当然有些perl或python编写的软件需要调用perl或python来进行编译)。如果在 make 过程中出现 error ,你就要记下错误代码(注意不仅仅是最后一行),然后你可以向开发者提交 bugreport(一般在 INSTALL 里有提交地址),或者你的系统少了一些依赖库等,这些需要自己仔细研究错误代码。

可能遇到的错误:make * * * 没有指明目标并且找不到 makefile。 没有Makefile,先./configure 一下,再make。make uninstall 是卸载,不加参数就是默认的进行源代码编译。

make工具,它是一个自动化编译工具,你可以使用一条命令实现完全编译。但是你需要编写一个规则文件,make依据它来批处理编译,这个文件就是makefile。

3、make insatll

这条命令来进行安装(当然有些软件需要先运行 make check 或 make test 来进行一些测试),这一步一般需要你有 root 权限(因为要向系统写入文件)。make install 和make install prefix=/usr/local/ 等价。make install prefix=/usr/local/ sysconfdir=/etc DESTDIR=/tmp/build支持DESTDIR 的意义就是,保证所有要安装的文件,都会被安装在DESTDIR目录下,不会污染系统的package的目录。install也 是linux系统命令。

3、扩展说明

通过上述我们知道在Linux下安装一个应用程序时,一般先运行脚本./configure,然后用make来编译源程序,在运行make install,最后运行make clean删除一些临时文件。

编译过程:

文本程序到可执行文件生成无论在什么平台大致分为以下几个部分: - 1.用编辑器编写源代码,如.c文件。 - 2.用编译器编译代码生成目标文件,如.o。 - 3.用链接器连接目标代码生成可执行文件,如.exe。

Linux平台下,.o文件一般是通过编译的但还未链接的目标文件,.out文件一般都是经过相应的链接产生的可执行文件(linux下)。当然这是一般情况下人们这么设置,而真正的,在linux中 .o通常保存的是可执行代码 ,至于可执行文件则没有规定扩展名,用的是文件属性位来决定的是否可执行。在chmod中设置。

编译和链接阶段是靠g++和gcc编辑器来完成,这两个编译阶段是相同的,但是链接阶段g++默认链接c++库,所以一般情况下用gcc编译c文件,而g++编译cpp文件。当然g++也可以编译c文件,而gcc编译cpp文件则需要在后面加上参数-lstdc++,作用就是链接c++库。

gcc是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器,它可以编译很多种编程语言(括C、C++、Objective-C、Fortran、Java等等)。当你的程序只有一个源文件时,直接就可以用gcc命令编译它。

但是当程序包含很多个源文件时,用gcc命令逐个去编译时,你就很容易混乱而且工作量大,于是出现了make工具。如果编译和链接的阶段源文件太多,它是一个自动化编译工具,可以使用一条命令实现完全编译。但是需要编写一个规则文件,make依据它来批处理编译,这个文件就是makefile,所以编写makefile文件也是一个程序员所必备的技能。

对于一个大工程,编写makefile实在是件复杂的事,于是人们又想,为什么不设计一个工具,读入所有源文件之后,自动生成makefile呢?于是出现了cmake工具,它能够输出各种各样的makefile或者project文件,从而帮助程序员减轻负担。但是随之而来也就是编写cmakelist文件,它是cmake所依据的规则。所以在编程的世界里没有捷径可走,还是要脚踏实地的。

原文件—cmakelist —cmake —makefile —make —生成可执行文件(make中则包含了多条链接以及gcc/g++编译语句)。

CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多。CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件,最后用make命令编译源码生成可执行程序或共享库(so(shared object))。它的作用和qt的qmake是相似的。

4、关联阅读

Linux项目自动化构建工具-make/Makefile

评论

评论列表

暂无评论

文章目录

    查看评论