如何为autoconf的系统类型--build configure选项确定正确的输入?

时间:2019-05-19 03:09:54

标签: gnu autoconf

在CPython中,构建机器的系统类型有一个配置选项

$ wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz
$ tar -xzvf Python-3.7.3.tgz
$ cd Python-3.7.3
$ ./configure --help | grep -A 3 "System types"
System types:
 --build=BUILD     configure for building on BUILD [guessed]
 --host=HOST       cross-compile to build programs to run on HOST [BUILD]
 --target=TARGET   configure for building compilers for TARGET [HOST]

对于任何Linux发行版,如何正确确定BUILD应该在此处?通过搜索,我发现CPython Issue 3754 (cross-compilation support for python build)可以看到有效的BUILD值是--build=x86_64-linux-gnu--build=x86_64-redhat-linux-gnu。我还从CPython Dockerfile for Python 3.7看到--build被设置为$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)的输出,在Debian Stretch上提供了该输出

$ docker run --rm debian:stretch /bin/bash -c "echo '$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)'"
x86_64-linux-gnu

但是,如果我使用的是CentOS 7之类的东西,那么如何使用OS命令正确确定呢?

理想情况下,我想要一些文档来更好地描述--build选项。因此,如果这是已知的并且可以链接到该链接,将足以回答问题。

编辑: Thanks to Anthony Shaw I learned,这不是CPython问题,但与autoconf有关。从提供给我的这些信息中,我在autoconf manual (Section 16.7 Specifying the System Type)中看到了

  

...为其提供--build=type选项。 type可以是系统类型的简称,例如“ sun4”,也可以是具有以下格式的规范名称:

cpu-company-system
     

系统可以具有以下形式之一:

os
kernel-os
     

有关每个字段的可能值,请参见文件config.sub。如果此软件包中未包含config.sub,则该软件包无需知道计算机类型。

CPython有一个config.sub

$ wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz
$ tar -xzvf Python-3.7.3.tgz
$ cd Python-3.7.3
$ ./config.sub --help
Usage: ./config.sub [OPTION] CPU-MFR-OPSYS or ALIAS

Canonicalize a configuration name.

Options:
  -h, --help         print this help, then exit
  -t, --time-stamp   print date of last modification, then exit
  -v, --version      print version number, then exit

Report bugs and patches to <config-patches@gnu.org>.

但是,对于我是否还是一个通用的Linux范围的解决方案来确定OS命令如何获取此信息的问题,我仍然不太清楚。

1 个答案:

答案 0 :(得分:0)

考虑到我的问题是,从The GNU configure and build system documentationConfiguration Names部分可以看出,当我询问“ [Linux] OS命令”时,我所描述的基本上是{{1} }已经提供:

  

shell脚本config.guess通常将为运行该脚本的系统打印正确的配置名称。它是通过运行config.guess并检查系统的其他特征来实现的。

     

由于uname通常可以确定计算机的配置名称,因此通常仅在构建交叉编译器或使用交叉编译器时才需要指定配置名称。

所以我的问题的答案似乎是config.guess已经支持我想做的事情,并且在我将要在同一台机器上构建时尝试通过传递configure信息运行时,如果我试图编写一个Shell脚本来自动化配置和构建过程,那我就无济于事。

问题What's the difference of “./configure” option “--build”, “--host” and “--target”?对于得出这个结论很有帮助。