Linux configure命令精通:一个完整的初学者教程
一、简介
Linux中的configure命令用于配置和准备软件包以进行编译和安装。它是一个常见的脚本,由软件开发者提供,用于检查系统的环境和依赖关系,并相应地生成Makefile,从而可以在特定的Linux系统上编译和安装软件包。
开源软件中一般都有一个名为"configure"的脚本文件,需要运行这个脚本来配置软件包才能进行后续编译和安装。configure命令会检查系统的库、头文件、依赖关系和其他必要的信息,然后生成一个Makefile,这时才可以使用make命令进行编译和安装。
为什么要学习configure命令?
- 更好地理解软件安装和配置的基本原则,包括对系统环境和依赖的检查,以及生成适合特定系统的Makefile等。
- 更深入地理解软件包管理的过程,包括对库、头文件、依赖关系的检查和配置。
- 能够自定义和优化软件的编译选项:configure命令提供了许多选项,允许自定义软件包的编译选项,包括开启/关闭特定功能、指定安装目录等,通过学习configure命令可以更灵活地配置和定制软件包。
- 更好地理解和编写自定义的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命令的常见用法:
- 检查系统环境:运行
./configure
命令可以自动检测系统环境,包括操作系统类型、处理器架构、编译器类型和版本等,以确定软件包在该系统上的编译和安装参数。 - 指定安装路径:使用
--prefix
选项来指定软件包的安装路径,例如./configure --prefix=/usr/local
,这样安装后的文件将被安装到/usr/local
目录下。 - 指定依赖项:使用
--with
和--without
选项指定软件包的依赖项,比如--with-openssl
表示启用对OpenSSL的支持,--without-x
表示禁用X Window系统的支持。 - 启用/禁用功能:通过
--enable-feature
和--disable-feature
选项可以启用或禁用特定的功能,比如--enable-threads
表示启用线程支持,--disable-debug
表示禁用调试功能。 - 查看帮助信息:运行
./configure --help
可以查看软件包特定的配置选项和帮助信息,了解可用的配置选项和其作用。 - 生成Makefile:configure命令会根据检测到的系统环境和用户指定的选项来生成一个适配当前系统的Makefile文件,然后可以使用
make
命令编译和安装软件包。
三、使用configure命令
- 进入软件包的源代码目录。假设软件包的源码解压后放在
~/software
目录下,则cd ~/software
。 - 运行configure命令来配置软件包:执行
./configure
。如果需要指定安装路径或启用特定的功能,可以附加相应的选项,例如:./configure --prefix=/usr/local --with-openssl --enable-threads
。可以通过./configure --help
命令查看所有可用的配置选项 - configure命令会检测系统环境,并根据提供的选项生成相应的Makefile文件。configure命令会检查系统上所需的依赖项和库是否存在。如果缺少某些依赖项,configure命令会提供相应的错误信息,并告知缺少哪些依赖项。
- configure命令完成后就可以使用
make
命令来编译软件包。 - 最后根据需要决定是否使用
make install
命令来安装已编译的软件包到系统中。
常见错误和警告:
- 没有找到所需的依赖项:当运行configure命令时可能会报告缺少某些依赖项。使用系统包管理器安装这些依赖项,然后重新运行configure命令。例如,在Ubuntu上使用apt:
sudoaptinstall<package_name>./configure
- 检测到不兼容的库版本:如果configure命令检测到系统上安装的库与软件包的要求不兼容,需要升级库的版本或将软件包重新配置。
- 未找到头文件或库文件:当使用configure命令时可能会报告未找到所需的头文件或库文件。可以通过设置相应的环境变量来指定这些文件的路径。例如:
exportCFLAGS="-I/usr/lib64/include"exportLDFLAGS="-L/usr/lib64/lib"
- 缺少必要的编译器或工具: 如果configure命令报告缺少必要的编译器或工具,则要安装这些工具。例如,在Ubuntu上安装gcc:
sudo apt install gcc
。
四、实际使用示例
以stressapptest开源代码为例。stressapptest(简称SAT)是一种用于在Linux系统上测试系统稳定性和可靠性的工具,通过产生CPU、内存、磁盘等各种负载来测试系统的稳定性。
- 下载软件包的源代码:
git clone https://github.com/stressapptest/stressapptest.git
- 进入源代码的目录:
cd stressapptest
- 查看帮助文档:
./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, --silentdo not print `checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache aliasfor`--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 specifyan 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 namesSystem 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 filesOptional 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 cpuSome 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
- 运行configure命令来配置软件包(如果需要自定义编译选项可以根据上面help所列出的添加,这里使用默认的选项):
./configure
- 使用make命令编译软件包:
make
- (可选)运行软件包的测试套件(如果有提供):
maketest
- 使用root权限(或sudo)安装软件包到系统中:
sudomakeinstall
如果想将软件包安装到自定义的目录,可以在运行configure时使用--prefix
选项,并在make install时使用DESTDIR
变量指定安装目录:./configure --prefix=/custom/installation/pathmakesudomakeinstallDESTDIR=/custom/installation/path
总结
- configure命令允许指定软件包安装的路径,这非常重要。
- configure命令会检查系统上是否存在所需的依赖项和库文件,并确保软件包在编译和运行时能够正确地链接到这些依赖项。
- configure命令允许指定编译时的选项,例如编译器选项、调试标志等。
- configure脚本在不同的操作系统和架构上提供了一致的界面,可移植性强。
版权归原作者 Lion Long 所有, 如有侵权,请联系我们删除。