settings
值的默认定义。 看起来像:
Windows:
subsystem: [None, cygwin, msys, msys2, wsl]
Linux:
Macos:
version: [None, "10.6", "10.7", "10.8", "10.9", "10.10", "10.11", "10.12", "10.13", "10.14"]
Android:
api_level: ANY
iOS:
version: ["7.0", "7.1", "8.0", "8.1", "8.2", "8.3", "9.0", "9.1", "9.2", "9.3", "10.0", "10.1", "10.2", "10.3", "11.0", "11.1", "11.2", "11.3", "11.4", "12.0", "12.1"]
watchOS:
version: ["4.0", "4.1", "4.2", "4.3", "5.0", "5.1"]
FreeBSD:
SunOS:
Emscripten:
arch: [x86, x86_64, ppc32, ppc64le, ppc64, armv4, armv4i, armv5el, armv5hf, armv6, armv7, armv7hf, armv7s, armv7k, armv8, armv8_32, armv8.3, sparc, sparcv9, mips, mips64, avr, s390, s390x, asm.js, wasm]
compiler:
gcc:
version: ["4.1", "4.4", "4.5", "4.6", "4.7", "4.8", "4.9",
"5", "5.1", "5.2", "5.3", "5.4", "5.5",
"6", "6.1", "6.2", "6.3", "6.4",
"7", "7.1", "7.2", "7.3",
"8", "8.1", "8.2",
"9"]
libcxx: [libstdc++, libstdc++11]
threads: [None, posix, win32] # Windows MinGW
exception: [None, dwarf2, sjlj, seh] # Windows MinGW
cppstd: [None, 98, gnu98, 11, gnu11, 14, gnu14, 17, gnu17, 20, gnu20]
Visual Studio:
runtime: [MD, MT, MTd, MDd]
version: ["8", "9", "10", "11", "12", "14", "15", "16"]
toolset: [None, v90, v100, v110, v110_xp, v120, v120_xp,
v140, v140_xp, v140_clang_c2, LLVM-vs2012, LLVM-vs2012_xp,
LLVM-vs2013, LLVM-vs2013_xp, LLVM-vs2014, LLVM-vs2014_xp,
LLVM-vs2017, LLVM-vs2017_xp, v141, v141_xp, v141_clang_c2, v142,
llvm, ClangCL]
cppstd: [None, 14, 17, 20]
这是默认设置和值。它们是所有开发人员都具有的程序包二进制ID的通用语法和符号。它们也用于验证,例如,如果您在配置文件[设置]中写了os = Windos(注意拼写错误)之类的东西,那么它将引发错误,告诉您它不是公认的os,并提供可用列表。 os。另外,请注意子设置在不同平台上有何不同,例如,对于gcc编译器存在标准C ++库(compiler.libcxx),而对于Visual Studio编译器则不存在。同样,Visual Studio具有gcc中缺少的运行时子设置。尝试在错误的编译器中错误地使用或定义这些子设置也将引发错误。
这些设置非常适合为开源程序包和大量主流配置定义基础。但是您可能需要更精细的定义所创建的二进制文件的细节。
例如,除了其他现代发行版之外,您还可能管理旧版Linux发行版(例如RHEL 6或旧版Centos)的二进制文件。问题在于,为现代发行版编译的二进制文件在那些较旧的发行版中将不起作用(不会与二进制兼容或与ABI不兼容),这主要是因为glibc版本不同。我们需要一种方法来建模这些平台的二进制文件的差异。查看“部署挑战”部分,其中详细说明了上述情况。