2017-08-29 7 views
0

rabbitmq-cライブラリのパッケージを作成するためのレシピを書いています。 ENABLE_SSL_SUPPORTオプションのCMakeスクリプトがチェックされている場合は、OpenSSLライブラリが必要です。コナンレシピの要件からCMakeパラメータとして使用するための正しい値を得るには?

RabbitMQ C client library CMake GUI screen

デバッグと libeay.lib のリリースバージョンとssleay.libファイルが必要とされるに提供される画面のパス上に示されるように。

私のconanfile.pyrabbitmq-cライブラリには、依存関係を説明する次のコードがあります。 RabbitMQの-CレシピのCMakeの configureオプションでそれらを設定するために必要なのOpenSSLパッケージから右の値を取得する方法

def requirements(self): 
    if self.options.ssl_support: 
     self.requires("OpenSSL/[email protected]/stable") 

パッケージOpenSSL/[email protected]/stableは、異なる設定とオプションでビルドすることができます。どのように私は建物のときに使用するかを選択するRabbitMQ-C?例えば、の静的バージョンか動的バージョンかを選択する方法OpenSSLと接続するために使用するかどうかを選択する方法RabbitMQ-Cdllファイル?

+1

あなたが意味する場合は、どのように依存関係のモデルにアクセスするには、消費者のレシピ(RabbitMQの)からあなたが '' self.deps_cpp_info経由でアクセスすることができます。彼らはあなたにも、後でお使いのモデルで使用することができ、debug, releaseのconfigsを定義します["OpenSSL"] ''。そのオブジェクトには、 '' include_paths''、 '' lib_paths''などの情報が含まれます。http://conanio.readthedocs.io/en/latest/integrations/other.htmlをチェックすることができます。これが理にかなっているかどうか教えてください。そして、私は拡張答えを詳述します – drodri

+0

@drodri +110xそれは理にかなっていますが、ここでは2つの異なるOpenSSLパッケージが必要です。 1つはデバッグ用、もう1つはリリース用です。今では、RabbitMQ-CのDebugとReleaseバリアント用に異なるパッケージを作成しています。このため、同じ値を使用できますが、RabbitMQ-Cのデバッグ用とリリース用の両方のパッケージを作成する場合? – bobeff

答えて

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): 
    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] 
0:

def build(self): 
    print(self.deps_cpp_info.include_paths) 
    print(self.deps_cpp_info.lib_paths) 
    ... 

ので、これらの値が与えられ、あなたのような何かができるCMakeの場合には、ビルドシステムに渡すことができます

これは、-DSSL_INCLUDE_PATH=<path to openssl include>フラグを含むcmakeコマンドに変換されます。

複数構成パッケージの場合は、(http://docs.conan.io/en/latest/packaging/package_info.html#multi-configuration-packages)を確認できます。

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) 
    ... 
+0

** OpenSSL **がマルチコンフィグレーションパッケージではなく、私が作成しているパッケージレシピであれば、** OpenSSL **のデバッグとリリースの両方のバージョンが必要ですか? – bobeff

+1

これはモデルでは不可能です。 '' cmake_multi''ジェネレータを使用し、デバッグとリリースの依存関係の両方をインストールするなどのいくつかのトリックが可能かもしれませんが、それは複雑でエラーが発生しやすいです。基本的には、依存関係グラフでは一貫していなければなりません。構築しているパッケージが複数構成の場合、依存関係は複数構成にする必要があります。 – drodri

関連する問題