Linux ./configure --prefix 选项的意义

本文深入探讨了源码安装中配置(configure)阶段的关键作用,包括使用命令./configure --help获取详细选项列表,强调了--prefix选项的重要性,解释了其在软件维护、卸载和移植方面的便利性。
源码的安装一般由3个步骤组成:配置(configure)、编译(make)、安装(make install),具体的安装方法一般作者都会给出文档,这里主要讨论配置(configure)。Configure是一个可执行脚本,它有很多选项,使用命令./configure –help输出详细的选项列表,如下:
-bash-3.00# ./configure --help
Usage: configure [options] [host]
Options: [defaults in brackets after descriptions]
Configuration:
--cache-file=FILE     cache test results in FILE
--help             print this message
--no-create         do not create output files
--quiet, --silent     do not print `checking...' messages
--version           print the version of autoconf that created configure
Directory and file names:
--prefix=PREFIX       install architecture-independent files in PREFIX
                [/usr/local]
--exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                [same as prefix]
--bindir=DIR         user executables in DIR [EPREFIX/bin]
……….(省略若干)
很多的选项,个人认为,你可以忽略其他的一切,但请把—prefix加上。这里以安装supersparrow-0.0.0为例,我们打算把它安装到目录 /usr/local/supersparrow,于是在supersparrow-0.0.0目录执行带选项的脚本./configure --prefix=/usr/local/supersparrow,执行成功后再编译、安装(make,make install);安装完成将自动生成目录supersparrow,而且该软件所有的文件都被复制到这个目录。为什么要指定这个安装目录?是为了以后的维护方便,如果没有用这个选项,安装过程结束后,该软件所需的软件被复制到不同的系统目录下,很难弄清楚到底复制了那些文件、都复制到哪里去了—基本上是一塌糊涂。

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

一个小选项有这么方便的作用,建议在实际工作中多多使用
<think>我们正在讨论`./configure`脚本的`--host`参数。根据用户提供的引用[2],`--host`参数用于指定编译出的程序将在哪个环境运行。例如:`--host=mips-linux`表示编译出的程序将在mips-linux环境下运行。 通常,`--host`参数可以接受一个“三元组”(triplet)作为值,这个三元组描述了目标平台的CPU架构、厂商、操作系统和ABI(应用程序二进制接口)。常见的三元组格式为:`cpu-vendor-os`或`cpu-vendor-os-abi`。其中,vendor字段有时可以省略或使用`unknown`。 常见的三元组示例: - `x86_64-pc-linux-gnu`:典型的64位Linux系统 - `i686-pc-linux-gnu`:32位Linux系统 - `arm-linux-gnueabihf`:ARM架构的Linux系统,使用硬浮点(hf) - `aarch64-linux-gnu`:ARM64架构的Linux系统 - `mips-linux-gnu`:MIPS架构的Linux系统 - `i386-mingw32`:Windows 32位系统,使用MinGW编译 - `x86_64-w64-mingw32`:Windows 64位系统,使用MinGW64编译 如何确定自己系统的三元组? 可以尝试在命令行中运行: ```bash gcc -dumpmachine ``` 或者在已经配置好的交叉编译工具链中,使用交叉编译器来获取,例如: ```bash arm-linux-gnueabihf-gcc -dumpmachine ``` 另外,`--host`参数也可以使用更简单的形式,比如只指定架构(如`arm`),但这样可能不够精确,因为不同的操作系统和ABI会有不同的调用约定。 当`--host`与`--build`和`--target`一起使用时: - `--build`:指定在哪个平台构建(执行编译的平台) - `--host`:指定生成的程序将在哪个平台运行 - `--target`:指定生成的程序将处理哪个平台的代码(主要针对编译器、汇编器等工具链软件) 一般情况下,我们只需要设置`--host`参数来指定目标平台。如果未指定`--host`,则默认与`--build`相同,即生成在本机运行的程序。 例如,在x86_64的Linux机器上,为ARM Linux设备编译程序: ```bash ./configure --host=arm-linux-gnueabihf ``` 注意:使用`--host`参数时,需要确保有对应的交叉编译工具链(如`arm-linux-gnueabihf-gcc`等)在PATH中,或者通过`CC=arm-linux-gnueabihf-gcc`等环境变量指定。 如果用户想了解特定软件包支持的`--host`选项,可以查看该软件包的文档,或者运行: ```bash ./configure --help ``` 在输出的帮助信息中可能会提到支持的宿主系统(host system)类型。 引用[1]提到,带上`--help`选项执行`configure`脚本能看到可用的所有选项[^1]。引用[2]解释了`--host`参数的作用以及它如何保存在`config.status`中[^2]。 因此,用户可以通过上述方法确定适合自己目标平台的`--host`值。 §§相关问题§§ 1. 如何为ARM64架构配置交叉编译工具链? 2. 在交叉编译时,如何指定目标平台的库路径? 3. 如何解决因`--host`参数设置不正确导致的编译错误?</think>### `./configure --host=` 参数详解 `--host` 参数用于指定**编译生成的程序将在哪个目标平台上运行**,是交叉编译(Cross-Compiling)的关键选项。它的值通常采用 "三元组(Triplet)" 格式,包含以下三部分信息: ```bash ./configure --host=架构-厂商-操作系统 ``` #### 常见参数选项示例 | 目标平台 | 典型值 | 说明 | |----------------|--------------------------------|------| | **ARM 32位** | `arm-linux-gnueabihf` | ARM 硬浮点(常见树莓派) | | **ARM 64位** | `aarch64-linux-gnu` | ARMv8 架构 | | **x86 32位** | `i686-pc-linux-gnu` | 32位 Linux | | **x86 64位** | `x86_64-pc-linux-gnu` | 64位 Linux | | **MIPS** | `mips-linux-gnu` | MIPS 架构设备 | | **Windows** | `i686-w64-mingw32` | 32位 Windows (MinGW) | | **macOS** | `x86_64-apple-darwin23.4.0` | Intel macOS | | **Android** | `armv7a-linux-androideabi` | ARM Android | #### 参数解析规则 1. **架构(Architecture)** 指定 CPU 架构:`arm`, `aarch64`, `i686`, `x86_64`, `mips`, `riscv64` 等 2. **厂商(Vendor)** 通常省略或用通用值: - `pc`(标准 PC) - `unknown`(未知厂商) - `w64`(Windows 交叉编译) 3. **操作系统(OS)** 定义目标系统环境: - `linux-gnu`(标准 Linux- `darwin`(macOS) - `androideabi`(Android) - `mingw32`(Windows) #### 使用示例 ```bash # 为树莓派编译 ./configure --host=arm-linux-gnueabihf --prefix=/usr/local # 为 Android ARMv8 编译 ./configure --host=aarch64-linux-android # 为 Windows 编译 ./configure --host=x86_64-w64-mingw32 ``` #### 如何确定正确参数? 1. **查询工具链** 使用交叉编译器获取默认值: ```bash arm-linux-gnueabihf-gcc -dumpmachine # 输出:arm-linux-gnueabihf ``` 2. **查看项目文档** 参考 `INSTALL` 或 `README.cross-compile` 文件 3. **使用 `--help` 选项** ```bash ./configure --help | grep host ``` 输出示例: ``` --host=HOST cross-compile to build programs to run on HOST [BUILD] ``` > 注意:交叉编译时需同时设置 `CC`/`CXX` 环境变量指向对应编译器[^2],例如: > ```bash > export CC=arm-linux-gnueabihf-gcc > ./configure --host=arm-linux-gnueabihf > ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值