Linux 下 Configure 及其参数用法详解

1 篇文章 0 订阅
1 篇文章 0 订阅

GNU 的configure的用法:

每个 GNU 发行版都应该附带一个名为 configure 的 shell 脚本。 该脚本给出了一些参数,这些参数描述了您要为其编译程序的机器和系统的类型。 配置脚本必须记录配置选项,以便它们影响编译。

这里的描述是GNU包中配置脚本的接口规范。 许多软件包使用 GNU Autoconf(请参阅 Autoconf 中的简介)和/或 GNU Automake(请参阅 Automake 中的简介)来实现它,但您不必使用这些工具。 您可以以任何您喜欢的方式实现它; 例如,通过使configure成为完全不同的配置系统的包装器。

配置脚本运行的另一种方法是从标准名称(例如 config.h)链接到所选系统的正确配置文件。 如果您使用此技术,发行版不应包含名为 config.h 的文件。 这样人们在不先配置的情况下将无法构建程序。

configure 可以做的另一件事是编辑 Makefile。 如果这样做,发行版不应包含名为 Makefile 的文件。 相反,它应该包含一个文件 Makefile.in,其中包含用于编辑的输入。 再次强调,这样我们在不先配置的情况下将无法构建程序。

如果configure确实写入了Makefile,那么Makefile应该有一个名为Makefile的目标,这会导致configure重新运行,设置与上次设置相同的配置。 配置读取的文件应列为 Makefile 的依赖项。

从配置脚本输出的所有文件都应该在开头有注释,说明它们是使用配置自动生成的。 这样用户就不会想到尝试手动编辑它们。

配置脚本应编写一个名为 config.status 的文件,该文件描述上次配置程序时指定的配置选项。 该文件应该是一个 shell 脚本,如果运行该脚本,将重新创建相同的配置。

配置脚本应接受“–srcdir=dirname”形式的选项来指定找到源的目录(如果不是当前目录)。 这使得可以在单独的目录中构建程序,从而不会修改实际的源目录。

如果用户未指定“–srcdir”,则配置应检查两者。 并…看看是否能找到来源。 如果它在这些地方之一找到源,它应该从那里使用它们。 否则,它应该报告找不到源,并且应该以非零状态退出。

通常支持“–srcdir”的简单方法是将 VPATH 的定义编辑到 Makefile 中。 某些规则可能需要显式引用指定的源目录。 为了实现这一点,configure 可以向 Makefile 添加一个名为 srcdir 的变量,其值正是指定的目录。

此外,“配置”脚本应采用与大多数标准目录变量相对应的选项(请参阅目录变量)。 这是列表:

--prefix --exec-prefix --bindir --sbindir --libexecdir --sysconfdir
--sharedstatedir --localstatedir --runstatedir
--libdir --includedir --oldincludedir
--datarootdir --datadir --infodir --localedir --mandir --docdir
--htmldir --dvidir --pdfdir --psdir

配置脚本还应该采用一个参数来指定要为其构建程序的系统类型。 这个论证应该是这样的:

cpu-company-system

例如,基于 Athlon 的 GNU/Linux 系统可能是“i686-pc-linux-gnu”,基于Raspberry 最新Desktop Debian12 的系统可能是“aarch64-linux-gnu”

配置脚本需要能够解码所有可能的替代方案来描述机器。 因此,“athlon-pc-gnu/linux”将是一个有效的别名。 有一个名为 config.sub 的 shell 脚本,您可以将其用作子例程来验证系统类型和规范化别名。

配置脚本还应该采用选项 --build=buildtype,它应该相当于普通的 buildtype 参数。 例如,“configure --build=i686-pc-linux-gnu”相当于“configure i686-pc-linux-gnu”。 当选项或参数未指定构建类型时,配置脚本通常应使用 shell 脚本 config.guess 来猜测它。

其他选项可以更详细地指定机器上存在的软件或硬件,包括或排除软件包的可选部分,或者调整某些工具的名称或参数:‘–enable-feature[=参数]’
配置包以构建和安装称为功能的可选用户级工具。 这允许用户选择要包含哪些可选功能。 如果默认构建了功能,则提供可选参数“no”应该忽略该功能。

–enable选项不应导致一项功能取代另一项功能。 任何“–enable”选项都不应该用一种有用的行为来替代另一种有用的行为。 “–enable”的唯一正确用法是用于解决是否构建程序的一部分或排除它的问题。
‘–with-package’
将安装 package 包,因此配置此包以与 package 一起使用。
package 的可能值包括“gnu-as”(或“gas”)、“gnu-ld”、“gnu-libc”、“gdb”、“x”和“x-toolkit”。
不要使用“–with”选项来指定用于查找某些文件的文件名。 这超出了“–with”选项的范围。
‘变量=值’
将变量变量的值设置为 value。 这用于覆盖构建过程中命令或参数的默认值。 例如,用户可以发出“configure CFLAGS=-g CXXFLAGS=-g”来使用调试信息进行构建,而不使用默认优化。

指定变量作为配置参数,如下所示:

./configure CC=gcc

最好将它们设置在环境变量中:

CC=gcc ./configure

因为它有助于稍后使用 config.status 重新创建相同的配置。 然而,这两种方法都应该被支持。

所有配置脚本都应该接受所有“详细”选项和变量设置,无论它们是否对手头的特定包有任何影响。 特别是,他们应该接受以“–with-”或“–enable-”开头的任何选项。 这样用户就能够使用一组选项立即配置整个 GNU 源代码树。

您会注意到,“–with-”和“–enable-”类别范围很窄:它们不为您可能想到的任何类型的选项提供位置。 那是故意的。 我们想要限制 GNU 软件中可能的配置选项。 我们不希望 GNU 程序有特殊的配置选项。

执行部分编译过程的包可能支持交叉编译。 在这种情况下,程序的主机和目标机器可能不同。

配置脚本通常应将指定类型的系统视为主机和目标,从而生成适用于与其运行的相同类型机器的程序。

要将程序编译为在不同于构建类型的主机类型上运行,请使用配置选项 --host=hosttype,其中 hosttype 使用与构建类型相同的语法。 主机类型通常默认为构建类型。

要配置交叉编译器、交叉汇编器或您拥有的东西,您应该使用配置选项“–target=targettype”指定与主机不同的目标。 targettype 的语法与主机类型的语法相同。 所以命令看起来像这样:

./configure --host=hosttype --target=targettype

目标类型通常默认为主机类型。 对于交叉操作没有意义的程序不需要接受“–target”选项,因为为交叉操作配置整个操作系统并不是一个有意义的操作。

有些程序有自动配置自身的方法。 如果您的程序设置为执行此操作,则您的配置脚本可以简单地忽略其大部分参数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值