在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命令如何获取此信息的问题,我仍然不太清楚。
答案 0 :(得分:0)
考虑到我的问题是,从The GNU configure and build system documentation的Configuration 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”?对于得出这个结论很有帮助。