2016-05-13 34 views
1

yaml-cpp gitリポジトリをサブモジュールとして追加し、add_subdirectoryを使ってCMakeプロジェクトに追加しました。正しく既存のプロジェクトにyaml-cppを追加するときにCMake変数を設定しました

すべては問題ありませんが、YAML_CPP_INCLUDE_DIRYAML_CPP_LIBRARIESを手動で設定して自分のターゲットに設定する必要があります。

ファイルyaml-cpp-config.cmake(ビルドフォルダに生成された)、私はちょうどそれを含めるようにしようとしたこれらの変数を設定することがありますので:

include("${CMAKE_BINARY_DIR}/yaml-cpp/yaml-cpp-config.cmake") 

は、その後私は得る:

CMake Error at /bla/bla/build/yaml-cpp/yaml-cpp-config.cmake:11 (include): 
    The file 

/bla/bla/aml-cpp/yaml-cpp-targets.cmake 

    was generated by the export() command. It may not be used as the argument 
    to the include() command. Use ALIAS targets instead to refer to targets by 
    alternative names. 

私は本当にドン」このメッセージを理解する。ハードコーディングされた変数を設定することなく、yaml-cppディレクトリとライブラリをターゲットにどのように提供しますか?

私はへの道を探していません。include()ファイルを作成する必要はありません。私はちょうど私がどのように私のターゲットに必要な情報を提供する必要があります興味があります。

残念ながらyaml-cppは、target_include_directories()を使用していないようですが、必要に応じて自動的にインクルードディレクトリが設定されます。

exportコマンドの descriptionから
+0

これは、開発者の警告であるとCMakeポリシー[CMP0024](https://cmake.org/cmake/help/latest/policy/CMP0024.html)で制御できます。警告の理由: "CMake 2.8.12以前では、export()コマンドの結果とinclude()コマンドの使用が許可されました。これは、export()コマンドがconfigure-time ...将来のリファクタリングは、生成時に実行されるexport()コマンドの効果を変更します。別の名前でターゲットを参照することが目標である場合は、代わりにALIASターゲットを使用します。 – Florian

答えて

2

は、現在のプロジェクトのビルドツリーからターゲットをインポートする プロジェクトに含まれるファイル<ファイル名>を作成します。

注「外」という言葉へ:exportコマンドを発行同じプロジェクトからファイルをインクルードしようとしているときにエラーメッセージを取得する理由です。

yaml-cpp-config.cmakeファイルを使用する正しい方法は、yaml-cpp以外に、プロジェクトのをビルドします。たとえば、ExternalProject_Addexecute_processを組み合わせて使用​​すると、プロジェクトの構成段階の一部として、yaml-cppビルドを使用することができます。詳細については、hereを参照してください。

その後は、find_packageでプロジェクトにファイルを与え含むことができる:

find_package(yaml-cpp PATHS <yaml-cpp-build-dir>) 

注意を、yaml-cpp-config.cmakeでバイナリディレクトリがyaml-cppプロジェクトのビルド状態を記述すること。

あなたがにプロジェクトからライブラリ/実行ファイルをインストールしたい場合は、に優れているyaml-cppをインストールし、対応したファイルが含まれてインストールディレクトリから:

find_package(yaml-cpp PATHS <yaml-cpp-install-dir>) 
+0

これは私が聞きたいと思っていたものではありませんが、おそらく正しいアプローチです:) – frans

+0

ライブラリとしてどのように含めるべきですか?私は、次のことを試みたが、うまくいきませんでしたされています。セット(YAML_CPP_INCLUDE_DIRS $ {CMAKE_CURRENT_SOURCE_DIR}/gtsam/3rdparty/YAML-CPP /含める/ YAML-CPP $ {CMAKE_CURRENT_SOURCE_DIR}/gtsam/3rdparty/YAML-CPPが/含ま $ { CMAKE_CURRENT_SOURCE_DIR}/gtsam/3rdparty/YAML-CPP/SRC $ {CMAKE_CURRENT_SOURCE_DIR}/gtsam/3rdparty/YAML-CPP) find_package(YAML-CPPパス$ {CMAKE_CURRENT_SOURCE_DIR}/gtsam/3rdparty/YAML-CPP /ビルド) include_directories ($ {YAML_CPP_INCLUDE_DIRS}) –

+0

'find_package(yaml-cpp)'の結果として設定される 'YAMLCPPConfig.cmake'ファイルに記述されています。新しい質問の投稿を作成してそこに問題を記述してください。コメントは新しい質問には適していません。 – Tsyvarev

関連する問題