settings.yml¶
此配置文件位于 Conan 用户主目录中,即 [CONAN_HOME]/settings.yml
。它看起来像这样
# This file was generated by Conan. Remove this comment if you edit this file or Conan
# will destroy your changes.
os:
Windows:
subsystem: [null, cygwin, msys, msys2, wsl]
WindowsStore:
version: ["8.1", "10.0"]
WindowsCE:
platform: [ANY]
version: ["5.0", "6.0", "7.0", "8.0"]
Linux:
iOS:
version: &ios_version
["7.0", "7.1", "8.0", "8.1", "8.2", "8.3", "8.4", "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", "12.2", "12.3", "12.4", "12.5",
"13.0", "13.1", "13.2", "13.3", "13.4", "13.5", "13.6", "13.7",
"14.0", "14.1", "14.2", "14.3", "14.4", "14.5", "14.6", "14.7", "14.8",
"15.0", "15.1", "15.2", "15.3", "15.4", "15.5", "15.6", "15.7", "15.8",
"16.0", "16.1", "16.2", "16.3", "16.4", "16.5", "16.6", "16.7",
"17.0", "17.1", "17.2", "17.3", "17.4", "17.5", "17.6", "17.8",
"18.0", "18.1", "18.2", "18.3", "18.4"]
sdk: ["iphoneos", "iphonesimulator"]
sdk_version: [null, "11.3", "11.4", "12.0", "12.1", "12.2", "12.4",
"13.0", "13.1", "13.2", "13.3", "13.4", "13.5", "13.6", "13.7",
"14.0", "14.1", "14.2", "14.3", "14.4", "14.5", "15.0", "15.2", "15.4",
"15.5", "16.0", "16.1", "16.2", "16.4", "17.0", "17.1", "17.2", "17.4", "17.5",
"18.0", "18.1", "18.2", "18.4"]
watchOS:
version: ["4.0", "4.1", "4.2", "4.3", "5.0", "5.1", "5.2", "5.3", "6.0", "6.1", "6.2", "6.3",
"7.0", "7.1", "7.2", "7.3", "7.4", "7.5", "7.6",
"8.0", "8.1", "8.3", "8.4", "8.5", "8.6", "8.7",
"9.0","9.1", "9.2", "9.3", "9.4", "9.5", "9.6",
"10.0", "10.1", "10.2", "10.3", "10.4", "10.5", "10.6",
"11.0", "11.1", "11.2", "11.3", "11.4"]
sdk: ["watchos", "watchsimulator"]
sdk_version: [null, "4.3", "5.0", "5.1", "5.2", "5.3", "6.0", "6.1", "6.2",
"7.0", "7.1", "7.2", "7.3", "7.4", "8.0", "8.0.1", "8.3", "8.5", "9.0", "9.1",
"9.4", "10.0", "10.1", "10.2", "10.4", "10.5",
"11.0", "11.1", "11.2", "11.4"]
tvOS:
version: ["11.0", "11.1", "11.2", "11.3", "11.4",
"12.0", "12.1", "12.2", "12.3", "12.4",
"13.0", "13.2", "13.3", "13.4",
"14.0", "14.2", "14.3", "14.4", "14.5", "14.6", "14.7",
"15.0", "15.1", "15.2", "15.3", "15.4", "15.5", "15.6",
"16.0", "16.1", "16.2", "16.3", "16.4", "16.5", "16.6",
"17.0", "17.1", "17.2", "17.3", "17.4", "17.5", "17.6",
"18.0", "18.1", "18.2", "18.3", "18.4"]
sdk: ["appletvos", "appletvsimulator"]
sdk_version: [null, "11.3", "11.4", "12.0", "12.1", "12.2", "12.4",
"13.0", "13.2", "13.3", "13.4", "14.0", "14.2", "14.3", "14.4", "14.5", "15.0",
"15.2", "15.4", "15.5", "16.0", "16.1", "16.4", "17.0", "17.1", "17.2", "17.4", "17.5",
"18.0", "18.1", "18.2", "18.4"]
visionOS:
version: ["1.0", "1.1", "1.2", "1.3", "2.0", "2.1", "2.2", "2.3", "2.4"]
sdk: ["xros", "xrsimulator"]
sdk_version: [null, "1.0", "1.1", "1.2", "1.3", "2.0", "2.1", "2.2", "2.4"]
Macos:
version: [null, "10.6", "10.7", "10.8", "10.9", "10.10", "10.11", "10.12", "10.13", "10.14", "10.15",
"11.0", "11.1", "11.2", "11.3", "11.4", "11.5", "11.6", "11.7",
"12.0", "12.1", "12.2", "12.3", "12.4", "12.5", "12.6", "12.7",
"13.0", "13.1", "13.2", "13.3", "13.4", "13.5", "13.6", "13.7",
"14.0", "14.1", "14.2", "14.3", "14.4", "14.5", "14.6", "14.7",
"15.0", "15.1", "15.2", "15.3", "15.4"]
sdk_version: [null, "10.13", "10.14", "10.15", "11.0", "11.1", "11.2", "11.3", "12.0", "12.1",
"12.3", "12.4", "13.0", "13.1", "13.3", "14.0", "14.2", "14.4", "14.5",
"15.0", "15.1", "15.2", "15.4"]
subsystem:
null:
catalyst:
ios_version: *ios_version
Android:
api_level: [ANY]
ndk_version: [null, ANY]
FreeBSD:
SunOS:
AIX:
Arduino:
board: [ANY]
Emscripten:
Neutrino:
version: ["6.4", "6.5", "6.6", "7.0", "7.1"]
baremetal:
VxWorks:
version: ["7"]
arch: [x86, x86_64, ppc32be, ppc32, ppc64le, ppc64,
armv4, armv4i, armv5el, armv5hf, armv6, armv7, armv7hf, armv7s, armv7k, armv8, armv8_32, armv8.3, arm64ec,
sparc, sparcv9,
mips, mips64, avr, s390, s390x, asm.js, wasm, sh4le,
e2k-v2, e2k-v3, e2k-v4, e2k-v5, e2k-v6, e2k-v7,
riscv64, riscv32,
xtensalx6, xtensalx106, xtensalx7,
tc131, tc16, tc161, tc162, tc18]
compiler:
sun-cc:
version: ["5.10", "5.11", "5.12", "5.13", "5.14", "5.15"]
threads: [null, posix]
libcxx: [libCstd, libstdcxx, libstlport, libstdc++]
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", "6.5",
"7", "7.1", "7.2", "7.3", "7.4", "7.5",
"8", "8.1", "8.2", "8.3", "8.4", "8.5",
"9", "9.1", "9.2", "9.3", "9.4", "9.5",
"10", "10.1", "10.2", "10.3", "10.4", "10.5",
"11", "11.1", "11.2", "11.3", "11.4", "11.5",
"12", "12.1", "12.2", "12.3", "12.4",
"13", "13.1", "13.2", "13.3", "13.4",
"14", "14.1", "14.2", "14.3",
"15", "15.1"]
libcxx: [libstdc++, libstdc++11]
threads: [null, posix, win32, mcf] # Windows MinGW
exception: [null, dwarf2, sjlj, seh] # Windows MinGW
cppstd: [null, 98, gnu98, 11, gnu11, 14, gnu14, 17, gnu17, 20, gnu20, 23, gnu23, 26, gnu26]
cstd: [null, 99, gnu99, 11, gnu11, 17, gnu17, 23, gnu23]
msvc:
version: [170, 180, 190, 191, 192, 193, 194]
update: [null, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
runtime: [static, dynamic]
runtime_type: [Debug, Release]
cppstd: [null, 14, 17, 20, 23]
toolset: [null, v110_xp, v120_xp, v140_xp, v141_xp]
cstd: [null, 11, 17]
clang:
version: ["3.3", "3.4", "3.5", "3.6", "3.7", "3.8", "3.9", "4.0",
"5.0", "6.0", "7.0", "7.1",
"8", "9", "10", "11", "12", "13", "14", "15", "16", "17",
"18", "19", "20"]
libcxx: [null, libstdc++, libstdc++11, libc++, c++_shared, c++_static]
cppstd: [null, 98, gnu98, 11, gnu11, 14, gnu14, 17, gnu17, 20, gnu20, 23, gnu23, 26, gnu26]
runtime: [null, static, dynamic]
runtime_type: [null, Debug, Release]
runtime_version: [null, v140, v141, v142, v143, v144]
cstd: [null, 99, gnu99, 11, gnu11, 17, gnu17, 23, gnu23]
apple-clang:
version: ["5.0", "5.1", "6.0", "6.1", "7.0", "7.3", "8.0", "8.1", "9.0", "9.1",
"10.0", "11.0", "12.0", "13", "13.0", "13.1", "14", "14.0", "15", "15.0",
"16", "16.0", "17", "17.0"]
libcxx: [libstdc++, libc++]
cppstd: [null, 98, gnu98, 11, gnu11, 14, gnu14, 17, gnu17, 20, gnu20, 23, gnu23, 26, gnu26]
cstd: [null, 99, gnu99, 11, gnu11, 17, gnu17, 23, gnu23]
intel-cc:
version: ["2021.1", "2021.2", "2021.3", "2021.4", "2022.1", "2022.2",
"2022.3", "2023.0", "2023.1", "2023.2", "2024.0", "2024.1",
"2025.0", "2025.1"]
update: [null, ANY]
mode: ["icx", "classic", "dpcpp"]
libcxx: [null, libstdc++, libstdc++11, libc++]
cppstd: [null, 98, gnu98, "03", gnu03, 11, gnu11, 14, gnu14, 17, gnu17, 20, gnu20, 23, gnu23]
runtime: [null, static, dynamic]
runtime_type: [null, Debug, Release]
qcc:
version: ["4.4", "5.4", "8.3"]
libcxx: [cxx, gpp, cpp, cpp-ne, accp, acpp-ne, ecpp, ecpp-ne]
cppstd: [null, 98, gnu98, 11, gnu11, 14, gnu14, 17, gnu17]
mcst-lcc:
version: ["1.19", "1.20", "1.21", "1.22", "1.23", "1.24", "1.25"]
libcxx: [libstdc++, libstdc++11]
cppstd: [null, 98, gnu98, 11, gnu11, 14, gnu14, 17, gnu17, 20, gnu20, 23, gnu23]
build_type: [null, Debug, Release, RelWithDebInfo, MinSizeRel]
如您所见,settings
的可能值定义在同一文件中。这样做是为了确保命名和拼写一致,并在用户和开源社区之间定义一个通用的设置模型。以下是一些关于 settings 的通用信息
如果某个 setting 允许设置为任何值,您可以使用
ANY
。如果某个 setting 允许设置为任何值或可以取消设置,您可以使用
[null, ANY]
。
但是,此配置文件可以根据任何需求进行修改,包括添加新的 settings 或 sub-settings 及其值。如果您想分发统一的 settings.yml 文件,可以使用 conan config install 命令。
操作系统¶
baremetal
操作系统是一种约定,表示二进制文件直接在硬件上运行,没有操作系统或等效层。这与 null
值有所区别,后者表示“此值未定义”。baremetal
是嵌入式微处理器和微控制器代码的一种常见命名约定。用户可以在 baremetal
setting 中进一步自定义子 settings,以指定其特定的硬件平台、板卡、系列等。目前 os=baremetal
值尚未被 Conan 内置的工具链和助手使用,但预计它们会发展并开始使用它。
编译器¶
关于不同编译器的一些说明
msvc¶
它使用编译器版本,即 190 (19.0)、191 (19.1) 等,而不是 Visual Studio IDE 版本 (15、16 等)。
它仅用于 conan.tools.cmake 和 conan.tools.microsoft 中的新构建集成,而不用于之前的集成。
使用 msvc
编译器时,Visual Studio 工具集版本(实际的 vcvars
激活和 MSBuild
位置)将由该编译器版本提供的默认值定义
msvc
编译器版本 ‘190’:Visual Studio 14 2015msvc
编译器版本 ‘191’:Visual Studio 15 2017msvc
编译器版本 ‘192’:Visual Studio 16 2019msvc
编译器版本 ‘193’:Visual Studio 17 2022
这可以在您的 profile 中通过 tools.microsoft.msbuild:vs_version
配置进行设置
[settings]
compiler=msvc
compiler.version=190
[conf]
tools.microsoft.msbuild:vs_version = 16
在这种情况下,vcvars
将激活 Visual Studio 16 的安装,但仍将使用 190
编译器版本,因为会设置必要的 toolset=v140
。
settings 定义了最后一位数字 update: [null, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
,默认值为 null
,这意味着 Conan 假定编译器补丁之间具有二进制兼容性,这对于 Microsoft 编译器通常有效。如果需要更精细的控制,您只需将 update
部分添加到您的 profile 中
[settings]
compiler=msvc
compiler.version=191
compiler.update=3
这将等同于完整版本 1913 (19.13)
。如果需要更详细的信息,您甚至可以在 settings.yml
中的 update
子 setting 中添加自己的数字。
intel-cc¶
警告
此功能为实验性功能,可能会发生重大更改。有关更多信息,请参阅Conan 稳定性部分。
此编译器旨在处理新的 Intel oneAPI DPC++/C++/Classic 编译器。您无需拥有 n 个不同的编译器,而是有 3 种不同的工作模式
用于 Intel oneAPI C++ 的
icx
。用于 Intel oneAPI DPC++ 的
dpcpp
。用于 Intel C++ Classic 的
classic
。
除此之外,Intel 发布的一些版本带有修订号,因此 update
字段应为所用 Intel 编译器版本的任何可能的次要版本号,例如,compiler.version=2021.1
和 compiler.update=311
表示 Intel 版本为 2021.1.311
。
架构¶
这里您可以找到对定义为 arch
、arch_build
和 arch_target
setting 的每种架构的简要说明。
x86:流行的 32 位 x86 架构。
x86_64:流行的 64 位 x64 架构。
ppc64le:PowerPC 64 位小端序架构。
ppc32:PowerPC 32 位架构。
ppc64le:PowerPC 64 位小端序架构。
ppc64:PowerPC 64 位大端序架构。
armv5el:ARM 32 位版本 5 架构,软浮点。
armv5hf:ARM 32 位版本 5 架构,硬浮点。
armv6:ARM 32 位版本 6 架构。
armv7:ARM 32 位版本 7 架构。
armv7hf:ARM 32 位版本 7 硬浮点架构。
armv7s:ARM 32 位版本 7 swift 架构,主要用于 iPhone 5、iPhone 5C 和 iPad 4 上的 Apple A6 和 A6X 芯片。
armv7k:ARM 32 位版本 7 k 架构,主要用于 Apple 的 WatchOS。
armv8:ARM 64 位和 32 位兼容版本 8 架构。它仅涵盖
aarch64
指令集。armv8_32:ARM 32 位版本 8 架构。它仅涵盖
aarch32
指令集 (也称为ILP32
)。armv8.3:ARM 64 位和 32 位兼容版本 8.3 架构。也称为
arm64e
,用于最新 iPhone 型号 (XS/XS Max/XR) 中添加的 A12 芯片组。arm64ec:Windows 11 ARM64EC(模拟兼容)。此架构支持是实验性且不完整的。在 CMake 中支持用于 VS 和 MSBuild 集成。如有必要,请在 Github 中报告新问题。
sparc:SPARC(可扩展处理器架构),最初由 Sun Microsystems 开发。
sparcv9:SPARC 版本 9 架构。
mips:32 位 MIPS(无互锁流水线级微处理器),由 MIPS Technologies(前身为 MIPS Computer Systems)开发。
mips64:64 位 MIPS(无互锁流水线级微处理器),由 MIPS Technologies(前身为 MIPS Computer Systems)开发。
avr:8 位 AVR 微控制器架构,由 Atmel(Microchip Technology)开发。
s390:IBM 的 32 位地址企业系统架构 390。
s390x:IBM 的 64 位地址企业系统架构 390。
asm.js:JavaScript 的子集,可用作编译器的低级目标,并非真正的处理器架构,由 Emscripten 生成。Conan 将其视为一种架构,以与构建系统设计(例如 GNU auto tools 和 CMake)对齐。
wasm:WebAssembly,并非真正的处理器架构,而是 Web 的字节码格式,由 Emscripten 生成。Conan 将其视为一种架构,以与构建系统设计(例如 GNU auto tools 和 CMake)对齐。
sh4le:日立 SH-4 SuperH 架构。
e2k-v2:Elbrus 2000 v2 512 位 VLIW(超长指令字)架构(Elbrus 2CM, Elbrus 2C+ CPU),最初由 MCST(Moscow Center of SPARC Technologies)开发。
e2k-v3:Elbrus 2000 v3 512 位 VLIW(超长指令字)架构(Elbrus 2S, 也称 Elbrus 4C, CPU),最初由 MCST(Moscow Center of SPARC Technologies)开发。
e2k-v4:Elbrus 2000 v4 512 位 VLIW(超长指令字)架构(Elbrus 8C, Elbrus 8C1, Elbrus 1C+ 和 Elbrus 1CK CPU),最初由 MCST(Moscow Center of SPARC Technologies)开发。
e2k-v5:Elbrus 2000 v5 512 位 VLIW(超长指令字)架构(Elbrus 8C2, 也称 Elbrus 8CB, CPU),最初由 MCST(Moscow Center of SPARC Technologies)开发。
e2k-v6:Elbrus 2000 v6 512 位 VLIW(超长指令字)架构(Elbrus 2C3, Elbrus 12C 和 Elbrus 16C CPU),最初由 MCST(Moscow Center of SPARC Technologies)开发。
e2k-v7:Elbrus 2000 v7 512 位 VLIW(超长指令字)架构(Elbrus 32C CPU),最初由 MCST(Moscow Center of SPARC Technologies)开发。
xtensalx6:用于 ESP32 微控制器的 Xtensa LX6 DPU。
xtensalx106:用于 ESP8266 微控制器的 Xtensa LX6 DPU。
xtensalx7:用于 ESP32-S2 和 ESP32-S3 微控制器的 Xtensa LX7 DPU。
C++ 标准库 (又称 compiler.libcxx)¶
compiler.libcxx
子 setting 定义要使用的 C++ 标准库实现。此子 setting 仅适用于某些编译器,例如适用于 clang、apple-clang 和 gcc,但不适用于 Visual Studio。
libstdc++ (gcc, clang, apple-clang, sun-cc):GNU C++ Library。请注意,这隐含地定义了 _GLIBCXX_USE_CXX11_ABI=0 以使用旧的 ABI。对于 CentOS 6 等旧系统来说,这可能是一个明智的选择。在 Linux 系统上,您可能需要安装 libstdc++-dev(在不同的发行版中包名可能不同)才能使用标准库。请注意,在 Apple 系统上使用 libstdc++ 已被弃用。
libstdc++11 (gcc, clang, apple-clang):GNU C++ Library。请注意,这隐含地定义了 _GLIBCXX_USE_CXX11_ABI=1 以使用新的 ABI。对于 Ubuntu 20 等新系统来说,这可能是一个明智的选择。在 Linux 系统上,您可能需要安装 libstdc++-dev(在不同的发行版中包名可能不同)才能使用标准库。请注意,在 Apple 系统上使用 libstdc++ 已被弃用。
libc++ (clang, apple-clang):LLVM libc++。在 Linux 系统上,您可能需要安装 libc++-dev(在不同的发行版中包名可能不同)才能使用标准库。
c++_shared (clang, 仅限 Android):将 LLVM libc++ 用作共享库。有关更多详细信息,请参阅 C++ 库支持。
c++_static (clang, 仅限 Android):将 LLVM libc++ 用作静态库。有关更多详细信息,请参阅 C++ 库支持。
libCstd (sun-cc):Rogue Wave 的标准库。请参阅 Comparing C++ Standard Libraries libCstd, libstlport, and libstdcxx。
libstlport (sun-cc):STLport。请参阅 Comparing C++ Standard Libraries libCstd, libstlport, and libstdcxx。
libstdcxx (sun-cc):Apache C++ Standard Library。请参阅 Comparing C++ Standard Libraries libCstd, libstlport, and libstdcxx。
gpp (qcc):GNU C++ lib。请参阅 QCC 文档。
cpp (qcc):Dinkum C++ lib。请参阅 QCC 文档。
cpp-ne (qcc):Dinkum C++ lib(无异常)。请参阅 QCC 文档。
acpp (qcc):Dinkum Abridged C++ lib。请参阅 QCC 文档。
acpp-ne (qcc):Dinkum Abridged C++ lib(无异常)。请参阅 QCC 文档。
ecpp (qcc):Embedded Dinkum C++ lib。请参阅 QCC 文档。
ecpp-ne (qcc):Embedded Dinkum C++ lib(无异常)。请参阅 QCC 文档。
cxx (qcc):LLVM C++。请参阅 QCC 文档。
自定义 settings¶
settings 也可以自定义以添加您自己的设置
添加新的 settings¶
可以在 settings.yml 文件的根部添加新的 settings,例如
os:
Windows:
subsystem: [null, cygwin, msys, msys2, wsl]
distro: [null, RHEL6, CentOS, Debian]
如果我们要从定义了此新 setting 的配方创建不同的二进制文件,我们需要在我们的配方中添加
class Pkg(ConanFile):
settings = "os", "compiler", "build_type", "arch", "distro"
值 null
允许不定义它(这将是一个默认值,对所有其他发行版都有效)。也可以在 profiles 中为其定义值
[settings]
os = "Linux"
distro = "CentOS"
compiler = "gcc"
并根据需要使用它们的值来影响我们的构建
class Pkg(ConanFile):
settings = "os", "compiler", "build_type", "arch", "distro"
def generate(self):
tc = CMakeToolchain(self)
if self.settings.distro == "CentOS":
tc.cache_variables["SOME_CENTOS_FLAG"] = "Some CentOS Value"
...
添加新的 sub-settings¶
上述方法需要修改所有配方才能考虑到这一点。也可能定义一些不兼容的 settings,例如 os=Windows
和 distro=CentOS
。虽然添加新的 settings 完全合适,但将其添加为 Linux
OS 的新 sub-setting 可能更有意义
os:
Windows:
subsystem: [null, cygwin, msys, msys2, wsl]
Linux:
distro: [null, RHEL6, CentOS, Debian]
使用此定义,我们可以将 profile 定义为
[settings]
os = "Linux"
os.distro = "CentOS"
compiler = "gcc"
任何尝试为 Linux
以外的 os
值定义 os.distro
的操作都将引发错误。
由于这是一个 sub-setting,所有声明了 os
setting 的配方都会自动考虑它。请注意,如果想保留之前创建的二进制文件,distro=null
的值是重要的,否则您将被强制始终定义一个特定的发行版值,并且没有此 sub-setting 创建的二进制文件将不再可用。
也可以从配方中访问此 sub-setting
class Pkg(ConanFile):
settings = "os", "compiler", "build_type", "arch" # Note, no "distro" defined here
def generate(self):
tc = CMakeToolchain(self)
if self.settings.os == "Linux" and self.settings.os.distro == "CentOS":
tc.cache_variables["SOME_CENTOS_FLAG"] = "Some CentOS Value"
可以使用 ANY
来定义嵌套的 subsettings,其中 ANY
是与定义值不匹配的任何值的备选。
os:
ANY:
version: [null, ANY]
Ubuntu:
version: ["18.04", "20.04"]
这将允许诸如 -s os=MyOS -s os.version=1.2.3
这样的 settings,因为对于 os!=Ubuntu
,版本可以是 ANY
,但如果尝试 -s os=Ubuntu -s os.version=1.2.3
,则会出错,因为 Ubuntu
只接受那些已定义的版本。
添加新值¶
同样地,正如我们添加了一个新的 distro
sub-setting 一样,也可以向现有的 settings 和 sub-settings 添加新的值。例如,如果某个编译器版本不在接受的值范围内,您可以添加这些新值。
您还可以添加一个全新的编译器
os:
Windows:
subsystem: [null, cygwin, msys, msys2, wsl]
...
compiler:
gcc:
...
mycompiler:
version: [1.1, 1.2]
msvc:
这与上面关于 profiles 的工作方式以及从配方访问它们的方式相同。自定义编译器的主要问题是,内置的构建助手,如 CMake
、MSBuild
等,内部包含检查这些值的代码。例如,MSBuild
构建助手只知道如何管理 msvc
setting 和 sub-settings,而不知道新的编译器。对于这些情况,可以在配方中实现自定义逻辑
class Pkg(ConanFile):
settings = "os", "compiler", "build_type", "arch"
def build(self):
if self.settings.compiler == "mycompiler":
my_custom_compile = ["some", "--flags", "for", "--my=compiler"]
self.run(["mycompiler", "."] + my_custom_compile)
注意
您可以从 settings.yml 文件中删除项目:编译器、操作系统、架构等。仅在您确实想防止为主要支持平台以外的其他平台创建二进制文件时才这样做。一般情况下,您可以保留它们,二进制配置在 profiles 中管理,您应该在 profiles 中定义您支持的配置,而不是通过限制 settings.yml 来实现
注意
如果您自定义 settings.yml,可以使用 conan config install 命令与您的团队和 CI 机器共享、分发和同步此配置。
settings_user.yml¶
上一节解释了如何自定义 Conan 的 settings.yml,但您也可以创建自己的 settings_user.yml。此文件将仅包含您想在配方中使用的新字段值,因此最终结果将是 settings.yml 和 settings_user.yml 两个文件的组合。