Linux configure命令精通:一个完整的初学者教程

一、简介

Linux中的configure命令用于配置和准备软件包以进行编译和安装。它是一个常见的脚本,由软件开发者提供,用于检查系统的环境和依赖关系,并相应地生成Makefile,从而可以在特定的Linux系统上编译和安装软件包。

开源软件中一般都有一个名为"configure"的脚本文件,需要运行这个脚本来配置软件包才能进行后续编译和安装。configure命令会检查系统的库、头文件、依赖关系和其他必要的信息,然后生成一个Makefile,这时才可以使用make命令进行编译和安装。

为什么要学习configure命令?

  1. 更好地理解软件安装和配置的基本原则,包括对系统环境和依赖的检查,以及生成适合特定系统的Makefile等。

  2. 更深入地理解软件包管理的过程,包括对库、头文件、依赖关系的检查和配置。

  3. 能够自定义和优化软件的编译选项:configure命令提供了许多选项,允许自定义软件包的编译选项,包括开启/关闭特定功能、指定安装目录等,通过学习configure命令可以更灵活地配置和定制软件包。

  4. 更好地理解和编写自定义的configure脚本,适应特定的开发需求。

在这里插入图片描述

二、基础知识

configure命令语法和选项取决于具体的软件包。一般来说,configure命令的基本语法如下:

./configure [options]

./configure是执行configure命令的命令行,[options]表示配置命令的选项,常见选项:

  • --prefix=DIR:指定软件安装的目录,默认是/usr/local
  • --with-<package>:指定依赖的其他软件包。
  • --without-<package>:指定不需要的软件包。
  • --enable-feature:启用特定的功能。
  • --disable-feature:禁用特定的功能。
  • --help:显示帮助信息。

注意:configure命令的选项和语法在不同的软件包中会有所不同,它不是固定的形式。

configure脚本是一个由Autoconf工具生成的用于配置软件的脚本,用于在源代码安装之前,根据系统环境自动检测和配置软件包的编译和安装参数。configure脚本的主要作用是根据系统环境的不同,生成适合该系统的Makefile文件,确保软件包能够正确地编译和安装。

configure脚本通常包含一些用于检测系统特性、依赖性和用户配置选项的命令,例如:

  • 检查系统的操作系统类型、版本和架构
  • 检查编译器类型、版本和特性
  • 检查系统库和头文件的位置
  • 自定义的软件包安装路径和其他选项

通过执行configure脚本,软件包可以根据系统环境进行自动化配置,并生成一个Makefile文件,使得软件包可以被正确地编译和安装到指定位置。

configure命令的常见用法

  1. 检查系统环境:运行./configure命令可以自动检测系统环境,包括操作系统类型、处理器架构、编译器类型和版本等,以确定软件包在该系统上的编译和安装参数。

  2. 指定安装路径:使用--prefix选项来指定软件包的安装路径,例如./configure --prefix=/usr/local,这样安装后的文件将被安装到/usr/local目录下。

  3. 指定依赖项:使用--with--without选项指定软件包的依赖项,比如--with-openssl表示启用对OpenSSL的支持,--without-x表示禁用X Window系统的支持。

  4. 启用/禁用功能:通过--enable-feature--disable-feature选项可以启用或禁用特定的功能,比如--enable-threads表示启用线程支持,--disable-debug表示禁用调试功能。

  5. 查看帮助信息:运行./configure --help可以查看软件包特定的配置选项和帮助信息,了解可用的配置选项和其作用。

  6. 生成Makefile:configure命令会根据检测到的系统环境和用户指定的选项来生成一个适配当前系统的Makefile文件,然后可以使用make命令编译和安装软件包。

三、使用configure命令

  1. 进入软件包的源代码目录。假设软件包的源码解压后放在~/software目录下,则cd ~/software

  2. 运行configure命令来配置软件包:执行./configure。如果需要指定安装路径或启用特定的功能,可以附加相应的选项,例如:./configure --prefix=/usr/local --with-openssl --enable-threads。可以通过./configure --help命令查看所有可用的配置选项

  3. configure命令会检测系统环境,并根据提供的选项生成相应的Makefile文件。configure命令会检查系统上所需的依赖项和库是否存在。如果缺少某些依赖项,configure命令会提供相应的错误信息,并告知缺少哪些依赖项。

  4. configure命令完成后就可以使用make命令来编译软件包。

  5. 最后根据需要决定是否使用make install命令来安装已编译的软件包到系统中。

常见错误和警告:

  1. 没有找到所需的依赖项:当运行configure命令时可能会报告缺少某些依赖项。使用系统包管理器安装这些依赖项,然后重新运行configure命令。例如,在Ubuntu上使用apt:

    sudo apt install <package_name>
    ./configure
    
  2. 检测到不兼容的库版本:如果configure命令检测到系统上安装的库与软件包的要求不兼容,需要升级库的版本或将软件包重新配置。

  3. 未找到头文件或库文件:当使用configure命令时可能会报告未找到所需的头文件或库文件。可以通过设置相应的环境变量来指定这些文件的路径。例如:

    export CFLAGS="-I/usr/lib64/include"
    export LDFLAGS="-L/usr/lib64/lib"
    
  4. 缺少必要的编译器或工具: 如果configure命令报告缺少必要的编译器或工具,则要安装这些工具。例如,在Ubuntu上安装gcc:sudo apt install gcc

四、实际使用示例

以stressapptest开源代码为例。stressapptest(简称SAT)是一种用于在Linux系统上测试系统稳定性和可靠性的工具,通过产生CPU、内存、磁盘等各种负载来测试系统的稳定性。

  1. 下载软件包的源代码:

    git clone https://github.com/stressapptest/stressapptest.git
    
  2. 进入源代码的目录:

    cd stressapptest
    
  3. 查看帮助文档:

    ./configure --help
    

    输出

    Configuration:
      -h, --help              display this help and exit
          --help=short        display options specific to this package
          --help=recursive    display the short help of all the included packages
      -V, --version           display version information and exit
      -q, --quiet, --silent   do not print `checking ...' messages
          --cache-file=FILE   cache test results in FILE [disabled]
      -C, --config-cache      alias for `--cache-file=config.cache'
      -n, --no-create         do not create output files
          --srcdir=DIR        find the sources in DIR [configure dir or `..']
    
    Installation directories:
      --prefix=PREFIX         install architecture-independent files in PREFIX
                              [/usr/local]
      --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                              [PREFIX]
    
    By default, `make install' will install all the files in
    `/usr/local/bin', `/usr/local/lib' etc.  You can specify
    an installation prefix other than `/usr/local' using `--prefix',
    for instance `--prefix=$HOME'.
    
    For better control, use the options below.
    
    Fine tuning of the installation directories:
      --bindir=DIR            user executables [EPREFIX/bin]
      --sbindir=DIR           system admin executables [EPREFIX/sbin]
      --libexecdir=DIR        program executables [EPREFIX/libexec]
      --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
      --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
      --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
      --runstatedir=DIR       modifiable per-process data [LOCALSTATEDIR/run]
      --libdir=DIR            object code libraries [EPREFIX/lib]
      --includedir=DIR        C header files [PREFIX/include]
      --oldincludedir=DIR     C header files for non-gcc [/usr/include]
      --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
      --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
      --infodir=DIR           info documentation [DATAROOTDIR/info]
      --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
      --mandir=DIR            man documentation [DATAROOTDIR/man]
      --docdir=DIR            documentation root [DATAROOTDIR/doc/stressapptest]
      --htmldir=DIR           html documentation [DOCDIR]
      --dvidir=DIR            dvi documentation [DOCDIR]
      --pdfdir=DIR            pdf documentation [DOCDIR]
      --psdir=DIR             ps documentation [DOCDIR]
    
    Program names:
      --program-prefix=PREFIX            prepend PREFIX to installed program names
      --program-suffix=SUFFIX            append SUFFIX to installed program names
      --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
    
    System types:
      --build=BUILD     configure for building on BUILD [guessed]
      --host=HOST       cross-compile to build programs to run on HOST [BUILD]
    
    Optional Features:
      --disable-option-checking  ignore unrecognized --enable/--with options
      --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
      --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
      --disable-dependency-tracking  speeds up one-time build
      --enable-dependency-tracking   do not reject slow dependency extractors
      --disable-default-optimizations
                              Disable default optimization flag overrides
      --disable-largefile     omit support for large files
    
    Optional Packages:
      --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
      --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
      --with-static            enable static linking
      --with-cpu            define host cpu
    
    Some influential environment variables:
      CXX         C++ compiler command
      CXXFLAGS    C++ compiler flags
      LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
                  nonstandard directory <lib dir>
      LIBS        libraries to pass to the linker, e.g. -l<library>
      CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
                  you have headers in a nonstandard directory <include dir>
      CC          C compiler command
      CFLAGS      C compiler flags
      CPP         C preprocessor
    
  4. 运行configure命令来配置软件包(如果需要自定义编译选项可以根据上面help所列出的添加,这里使用默认的选项):

    ./configure
    
  5. 使用make命令编译软件包:

    make
    
  6. (可选)运行软件包的测试套件(如果有提供):

    make test
    
  7. 使用root权限(或sudo)安装软件包到系统中:

    sudo make install
    

    如果想将软件包安装到自定义的目录,可以在运行configure时使用--prefix选项,并在make install时使用DESTDIR变量指定安装目录:

    ./configure --prefix=/custom/installation/path
    make
    sudo make install DESTDIR=/custom/installation/path
    

总结

  1. configure命令允许指定软件包安装的路径,这非常重要。

  2. configure命令会检查系统上是否存在所需的依赖项和库文件,并确保软件包在编译和运行时能够正确地链接到这些依赖项。

  3. configure命令允许指定编译时的选项,例如编译器选项、调试标志等。

  4. configure脚本在不同的操作系统和架构上提供了一致的界面,可移植性强。

在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐