Как получить правильные значения из требований в рецепте Конана, которые будут использоваться в качестве параметров CMake?
Я пишу рецепт создания пакета для библиотеки rabbitmq-c. Когда опция ENABLE_SSL_SUPPORT в сценарии CMake включена, для сборки требуется библиотека OpenSSL.
Как показано на предоставленном экране, требуются пути к версиям Debug и Release файлов libeay.lib и ssleay.lib.
В моем conanfile.py
за rabbitmq-c
Библиотека У меня есть следующий код, который описывает зависимость.
def requirements(self):
if self.options.ssl_support:
self.requires("OpenSSL/1.0.2l@bobeff/stable")
Как получить правильные значения из необходимого пакета OpenSSL, чтобы установить их в настройках CMake для рецепта RabbitMQ-C?
Посылка OpenSSL/1.0.2l@bobeff/stable
можно строить с разными настройками и опциями. Как выбрать, какой использовать при сборке RabbitMQ-C? Например, как выбрать, использовать ли статическую или динамическую версию OpenSSL для связи с файлами DLL RabbitMQ-C?
1 ответ
У вас есть полный доступ к модели зависимостей внутри вашего build()
метод, так что вы можете получить доступ к:
def build(self):
print(self.deps_cpp_info["OpenSSL"].rootpath)
print(self.deps_cpp_info["OpenSSL"].include_paths)
print(self.deps_cpp_info["OpenSSL"].lib_paths)
print(self.deps_cpp_info["OpenSSL"].bin_paths)
print(self.deps_cpp_info["OpenSSL"].libs)
print(self.deps_cpp_info["OpenSSL"].defines)
print(self.deps_cpp_info["OpenSSL"].cflags)
print(self.deps_cpp_info["OpenSSL"].cppflags)
print(self.deps_cpp_info["OpenSSL"].sharedlinkflags)
print(self.deps_cpp_info["OpenSSL"].exelinkflags)
Также, если вы хотите получить доступ к агрегированным значениям (для всех зависимостей / требований), вы можете сделать:
def build(self):
print(self.deps_cpp_info.include_paths)
print(self.deps_cpp_info.lib_paths)
...
Итак, учитывая эти значения, вы можете передать их в вашу систему сборки, в случае с CMake вы можете сделать что-то вроде:
def build(self):
cmake = CMake(self)
# Assuming there is only 1 include path, otherwise, we could join it
cmake.definitions["SSL_INCLUDE_PATH"] = self.deps_cpp_info["OpenSSL"].include_paths[0]
Это будет переведено в команду cmake, включая -DSSL_INCLUDE_PATH=<path to openssl include>
флаг.
Если вы выбираете многоконфигурационные пакеты, вы можете проверить ( http://docs.conan.io/en/latest/packaging/package_info.html). Они будут определять debug, release
конфиги, которые вы можете позже использовать в вашей модели:
def build(self):
# besides the above values, that will contain data for both configs
# you can access information specific for each configuration
print(self.deps_cpp_info["OpenSSL"].debug.rootpath)
print(self.deps_cpp_info["OpenSSL"].debug.include_paths)
...
print(self.deps_cpp_info["OpenSSL"].release.rootpath)
print(self.deps_cpp_info["OpenSSL"].release.include_paths)
...