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

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

一、基本信息

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

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

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

二、详细解释

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表示禁用图形界面。

–with-package=dir

–with-apxs 是指定 apache 的配置程序路径,php编译程序会通过这个程序查找apache的相关路径

–with-libxml-dir 指向的是 libxml 的库路径

–with-gd 指静态编译gd库

–with-png-dir 指定 libpng 的路径

–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系统命令。

三、扩展说明

Linux的用户可能知道,在Linux下安装一个应用程序时,一般先运行脚本configure,然后用make来编译源程序,在运行make install,最后运行make clean删除一些临时文件。使用上述三个自动工具,就可以生成configure脚本。运行configure脚本,就可以生成Makefile文件,然后就可以运行make、make install和make clean。

configure是一个shell脚本,它可以自动设定源程序以符合各种不同平台上Unix系统的特性,并且根据系统叁数及环境产生合适的Makefile文件或是C的头文件(header file),让源程序可以很方便地在这些不同的平台上被编译连接。

这时,就可运行configure脚本了,运行configure脚本,就可产生出符合GNU规范的Makefile文件了: $ ./configure

到此时,就可以运行make进行编译,在运行make install进行安装了,最后运行make clean删除临时文件。

$ make $ make install (注:运行这个要有足够的权限) $ make clean

利用configure所产生的Makefile文件有几个预设的目标可供使用,其中几个重要的简述如下:

make all:产生我们设定的目标,即此范例中的可执行文件。只打make也可以,此时会开始编译原始码,然后连结,并且产生可执行文件。只打make 默认就是make all,只编译其中某个目标则在后面给目标名称:make ce-common。

make clean:清除编译产生的可执行文件及目标文件(object file,*.o)。

make distclean:除了清除可执行文件和目标文件外,把configure所产生的Makefile也清除掉。

make install:将程序安装至系统中。如果原始码编译无误,且执行结果正确,便可以把程序安装至系统预设的可执行文件存放路径。

make dist:将程序和相关的档案包装成一个压缩文件以供发布。执行完在目录下会产生一个以PACKAGE-VERSION.tar.gz为名称的文件。 PACKAGE和VERSION这两个变数是根据http://configure.in文件中AM_INIT_AUTOMAKE(PACKAGE,VERSION)的定义。在此范例中会产生test-1.0.tar.gz的档案。

make distcheck:和make dist类似,但是加入检查包装后的压缩文件是否正常。这个目标除了把程序和相关文件包装成tar.gz文件外,还会自动把这个压缩文件解开,执行 configure,并且进行make all 的动作,确认编译无误后,会显示这个tar.gz文件可供发布了。这个检查非常有用,检查过关的包,基本上可以给任何一个具备GNU开发环境-的人去重新编译。

四、编译详细过程

文本程序到可执行文件生成无论在什么平台大致分为以下几个部分:
  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是相似的。

GNU就是GNU’s Not Unix的缩写, GNU 的创始人Stallman 认为UNIX 虽然不是最
好的操作系统,但是至少不会太差,而他自信有能力把UNIX不足的地方加以改进,使它成为一个优良的操作系统, 就是名为 GNU的一个同UNIX兼容的操作系统,并且开发这个系统的目的就是为了让所有计算机用户都可以自由地获得这个系统。任何人都可以免费地获得这个系统的源代码,并且可以相互自由拷贝。因而在使用GNU软件的时候我们可以理直气壮地说我们使用的是正版软件。当然GNU也是有自己的版权声明(即GPL)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误提示意味着系统找不到 `configure` 文件或 `make` 命令。请确保您已经在正确的目录,并且已经按照正确的顺序运行了这些命令。 通常,在编译并安装源代码软件包时,需要按照以下步骤进行操作: 1. 解压缩源代码包。您可以使用 `tar` 命令将 `.tar.gz` 或 `.tar.bz2` 文件解压缩为源代码目录。例如,如果您的源代码文件名为 `speex-1.2.0.tar.gz`,则可以使用以下命令将其解压缩: ``` tar -xzf speex-1.2.0.tar.gz ``` 2. 进入源代码目录。例如,如果您的源代码目录名为 `speex-1.2.0`,则可以使用以下命令进入该目录: ``` cd speex-1.2.0 ``` 3. 运行 `configure` 脚本以生成 Makefile。`configure` 脚本将检查系统环境,并生成适合当前系统的 Makefile。运行以下命令以运行 `configure` 脚本: ``` ./configure ``` 4. 运行 `make` 命令来编译软件包。Makefile 包含了编译和链接源代码的指令,运行以下命令以编译软件包: ``` make ``` 5. 运行 `make install` 命令来安装软件包。这将把编译好的二进制文件和库文件安装到系统。运行以下命令以安装软件包: ``` make install ``` 请注意,这些命令需要在源代码软件包的根目录下运行。如果您尝试在其他目录下运行这些命令,系统将无法找到相关文件或命令,并显示类似于 "No such file or directory" 的错误信息。 希望这可以帮助您解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值