首页 > 解决方案 > 如何覆盖我的项目中的柯南共享选项?

问题描述

我有一个带有以下柯南食谱的项目:

from conans import ConanFile, CMake

class MyLibConan(ConanFile):
    name = "mylib"
    version = "1.16.0"
    generators = "cmake"
    settings = "os", "arch", "compiler", "build_type"
    options = {"shared": [True, False]}
    default_options = "shared=False"
    exports_sources = ["*"]
    url = "some-url"
    license = "my license"
    description = "my library"

    def build(self):
        cmake = CMake(self)
        cmake.configure()
        cmake.build()

    def package(self):
       # do some copying here

    def package_info(self):
        self.cpp_info.includedirs = ['include']
        self.cpp_info.libdirs = ['lib']
        self.cpp_info.libs = ['mylib']

该库应该以静态模式构建。但是公司服务器将其构建为共享,我的库测试失败,因为他们找不到.lib文件。

即使我将默认类型设置为静态,当服务器运行它的脚本时它也会被覆盖。我还从 中删除了该True值,options但是整个脚本失败了,因为True它不是一个选项。

options = {"shared": [False]}

如何确保库始终以静态模式构建而服务器脚本不会失败?

标签: c++artifactoryconanbuild-type

解决方案


显而易见的建议是修复您的服务器脚本,因为您的库可以构建为共享的和静态的。另一种可能性是更新您的服务器脚本以生成静态和共享,而不仅仅是一个选项。如果在您的公司中您需要维护一个内部脚本,我建议您改用Conan Package Tools,您可以在其中定义一组要构建的配置。

但是,如果这不是一种可能的情况并且您确实需要一种解决方法,您仍然可以在configure(self)方法中强制执行您的包选项:

def configure(self):
    self.options.shared = False

它将在构建时覆盖参数传递的任何值。此外,包 ID 将相同,因为您的包将始终是静态的。


推荐阅读