config_options()

config_options() 方法用于在为包中的可用选项赋值**之前**配置或约束它们。一个典型的用例是在给定平台中移除某个选项。例如,SSE2 标志不存在于非 32 位架构中,因此应在此方法中移除,如下所示:

def config_options(self):
    if self.settings.arch != "x86_64":
        del self.options.with_sse2

config_options() 方法执行于

  • 调用 configure() 方法之前。

  • options 赋值之前。

  • settings 已定义之后。

可用的自动实现

警告

此特性是实验性的,可能会发生重大变更。更多信息请参阅 Conan 稳定性 部分。

如果未定义 config_options() 方法,Conan 可以自动管理某些约定俗成的选项,前提是这些选项在 implements ConanFile 属性中指定了

auto_shared_fpic

自动管理的选项

  • fPIC (True, False)。

可以像这样添加到 recipe 中

from conan import ConanFile

class Pkg(ConanFile):
    implements = ["auto_shared_fpic"]
    ...

然后,如果在 recipe 中没有指定 config_options() 方法,Conan 将在 config_options 步骤中自动管理 fPIC 设置,如下所示:

if conanfile.settings.get_safe("os") == "Windows":
    conanfile.options.rm_safe("fPIC")

请注意,将此实现添加到 recipe 也可能会影响 configure 步骤。

如果你需要在 recipe 中实现自定义行为,同时还需要此逻辑,则必须明确声明

def config_options(self):
    if conanfile.settings.get_safe("os") == "Windows":
        conanfile.options.rm_safe("fPIC")
    if self.settings.arch != "x86_64":
        del self.options.with_sse2

另请参阅