2012-01-06 13 views
4

私のプロジェクトにライブラリ(具体的にはyaml-cpp)を含めることにしました。両方のプロジェクト(yaml-cppとmine)がビルドにCMAKEを使用しているので、yaml-cppのCMakeLists.txtに既にCMake:サブディレクトリからインクルードするディレクトリがありません

が含まれているので、yaml-cppのディレクトリ内にyaml-cppディレクトリをルートディレクトリ内に配置することにしました。
include_directories(${YAML_CPP_SOURCE_DIR}/include) 

# ... 

add_library(yaml-cpp 
    ${sources} 
    ${public_headers} 
    ${private_headers} 
    ${contrib_sources} 
    ${contrib_public_headers} 
    ${contrib_private_headers} 
) 

... includeとライブラリターゲットの両方でうまくいくはずです。私は自分のCMakeLists.txtにラインinclude_directories(${YAML_CPP_SOURCE_DIR}/include)を複製しない限り、

私の質問は...

P:\zpp\TheGameShow\TGS.cpp(16): fatal error C1083: Cannot open include file: 'yaml-cpp/yaml.h': No such file or directory

:しかし、それは、私は次のエラーを取得するコンパイル時に、結局のところ、それは必要な動作ですか?インクルードディレクトリは、サブディレクトリからルートディレクトリに伝播するべきではありませんか?私は何か間違っているのですか?

編集:私は、Visual Studio 2010を使用し、CMakeの2.8.6

答えて

5

はい、それは希望の動作しています。高レベルのCMakeLists.txtには何も伝えられていません。唯一の例外 - キャッシュの値(さまざまなfind_ *とset(VAR 123 CACHE STRING)set(VAR 123 PARENT_SCOPE)によって作成されます。

+2

そして、それは悪い設計です。それをより高いレベルに伝播する明確な方法があるはずです。 – Lothar

関連する問題