/.conan/settings.yml 中有一个文件,其中包含Conan软件包配方允许的settings值的默认定义。 看起来像:

    1. Windows:
    2. subsystem: [None, cygwin, msys, msys2, wsl]
    3. Linux:
    4. Macos:
    5. version: [None, "10.6", "10.7", "10.8", "10.9", "10.10", "10.11", "10.12", "10.13", "10.14"]
    6. Android:
    7. api_level: ANY
    8. iOS:
    9. 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"]
    10. watchOS:
    11. version: ["4.0", "4.1", "4.2", "4.3", "5.0", "5.1"]
    12. FreeBSD:
    13. SunOS:
    14. Emscripten:
    15. 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]
    16. compiler:
    17. gcc:
    18. version: ["4.1", "4.4", "4.5", "4.6", "4.7", "4.8", "4.9",
    19. "5", "5.1", "5.2", "5.3", "5.4", "5.5",
    20. "6", "6.1", "6.2", "6.3", "6.4",
    21. "7", "7.1", "7.2", "7.3",
    22. "8", "8.1", "8.2",
    23. "9"]
    24. libcxx: [libstdc++, libstdc++11]
    25. threads: [None, posix, win32] # Windows MinGW
    26. exception: [None, dwarf2, sjlj, seh] # Windows MinGW
    27. cppstd: [None, 98, gnu98, 11, gnu11, 14, gnu14, 17, gnu17, 20, gnu20]
    28. Visual Studio:
    29. runtime: [MD, MT, MTd, MDd]
    30. version: ["8", "9", "10", "11", "12", "14", "15", "16"]
    31. toolset: [None, v90, v100, v110, v110_xp, v120, v120_xp,
    32. v140, v140_xp, v140_clang_c2, LLVM-vs2012, LLVM-vs2012_xp,
    33. LLVM-vs2013, LLVM-vs2013_xp, LLVM-vs2014, LLVM-vs2014_xp,
    34. LLVM-vs2017, LLVM-vs2017_xp, v141, v141_xp, v141_clang_c2, v142,
    35. llvm, ClangCL]
    36. 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版本不同。我们需要一种方法来建模这些平台的二进制文件的差异。查看“部署挑战”部分,其中详细说明了上述情况。