如何从 Conan 配方中的要求中获取正确的值以用作 CMake 参数?
How to get right values from requirements in Conan recipe to be used as CMake parameters?
我正在编写为 rabbitmq-c 库创建包的方法。当检查其 ENABLE_SSL_SUPPORT 脚本中的 CMake 选项时,它的构建需要 OpenSSL 库.
如提供的 Debug 和 Release 版本 libeay.lib[= 的屏幕路径所示42=] 和 ssleay.lib 文件是必需的。
在我的 conanfile.py
for 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 的静态或动态版本用于与 RabbitMQ-C dll[=55 的链接=] 个文件?
您可以完全访问 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)
此外,如果您想访问聚合值(对于所有 dependencies/requirements),您可以执行以下操作:
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]
这将被转换为包含 -DSSL_INCLUDE_PATH=<path to openssl include>
标志的 cmake 命令。
如果你想要多配置包,你可以检查(http://docs.conan.io/en/latest/packaging/package_info.html#multi-configuration-packages)。他们将定义 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)
...
我正在编写为 rabbitmq-c 库创建包的方法。当检查其 ENABLE_SSL_SUPPORT 脚本中的 CMake 选项时,它的构建需要 OpenSSL 库.
如提供的 Debug 和 Release 版本 libeay.lib[= 的屏幕路径所示42=] 和 ssleay.lib 文件是必需的。
在我的 conanfile.py
for 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 的静态或动态版本用于与 RabbitMQ-C dll[=55 的链接=] 个文件?
您可以完全访问 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)
此外,如果您想访问聚合值(对于所有 dependencies/requirements),您可以执行以下操作:
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]
这将被转换为包含 -DSSL_INCLUDE_PATH=<path to openssl include>
标志的 cmake 命令。
如果你想要多配置包,你可以检查(http://docs.conan.io/en/latest/packaging/package_info.html#multi-configuration-packages)。他们将定义 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)
...