c++ - 如何覆盖我的项目中的柯南共享选项?
问题描述
我有一个带有以下柯南食谱的项目:
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]}
如何确保库始终以静态模式构建而服务器脚本不会失败?
解决方案
显而易见的建议是修复您的服务器脚本,因为您的库可以构建为共享的和静态的。另一种可能性是更新您的服务器脚本以生成静态和共享,而不仅仅是一个选项。如果在您的公司中您需要维护一个内部脚本,我建议您改用Conan Package Tools,您可以在其中定义一组要构建的配置。
但是,如果这不是一种可能的情况并且您确实需要一种解决方法,您仍然可以在configure(self)
方法中强制执行您的包选项:
def configure(self):
self.options.shared = False
它将在构建时覆盖参数传递的任何值。此外,包 ID 将相同,因为您的包将始终是静态的。
推荐阅读
- vba - VBA | Word - 如何从 InLine ScrollBar 中获取值或如何拥有类似的 ValueSlider?
- sql - SQL - 如何对表中的某些行求和/聚合
- mysql - Unable to run a JDBC Source connector with Confluent REST API
- java - Spring LinkedMultiValueMap 的源代码
- elasticsearch - 如何访问 elasticsearch.yml?
- java - 场景生成器不打开 fxml 文件
- css - 样式表更改后 Chrome 66+ SVG 不更新颜色
- php - PHP嵌套包含在批处理php过程中
- sharepoint - 如何在 SPFx 中使用本地化资源?
- mysql - 出现错误无法执行语句:由于 BINLOG_FORMAT = STATEMENT 无法写入二进制日志