2012-04-04 15 views
12

のディレクトリ構造以下がありますとしましょう:cmakeの:いないサブディレクトリに依存関係を追加

root 
    | 
    +--projects 
    |  | 
    |  +-test 
    |   | 
    |   +-CMakeFiles.txt 
    | 
    +--libs 
     | 
     +-testlib 
      | 
      +-CMakeFiles.txt 

テストはCMakeFiles.txtとTESTLIBもCMakeFiles.txtが含まれて含まれています。 "test"は実行可能ファイルを生成し、 "testlib"は静的ライブラリを生成します。

symlinkを使用せずに "testlib"ライブラリを "test"内のサブディレクトリに移動することなく "testlib"とリンクさせたいと思っています。

「TESTLIBは、」「テスト」のサブディレクトリではありませんので、私はテストのCMakeFiles.txtで

add_subdirectory("../../libs/testlib") 

を行うことはできません - cmakeのは、「TESTLIBは」「テスト」サブディレクトリにされていない文句を言うだろう。

また、システムにはいくつかの異なるコンパイラがあるので、単に "testlib"ライブラリを何らかのセントラルディレクトリにインストールすることはできないので、testlibのローカルコピーをコンパイルしてテストしたいのです。サブディレクトリ)。また、 "testlib"が変更された場合、自動的に "testlib"を再構築する "test"プロジェクトも必要です。

どうすれば対処できますか? cmake 2.8.4、winxp sp3。

答えて

14

rootにトップレベルCMakeLists.txtを指定するか、add_subdirectoryコマンドにバイナリディレクトリを指定することができます。例えば

add_subdirectory("../../libs/testlib" "${CMAKE_CURRENT_BINARY_DIR}/testlib_build") 

これはTESTLIB用に生成されたプロジェクトファイルが含まれているあなたの現在のビルドディレクトリ内にtestlib_buildというサブディレクトリではなく、ソースを作成します。さらに詳細については

cmake --help-command ADD_SUBDIRECTORY 
+0

感謝を実行する - それは私がまさに必要です。 – SigTerm

+0

@Fraser - testlib_buildのCMakeFileにバイナリディレクトリを指定することはできますか? – tower120

+0

@ tower120 - いいえ、あなたは 'add_subdirectory'呼び出しでそれを指定する必要があります。 – Fraser

10

私はこれを行うに見る唯一の方法 - ルートにCMakeLists.txtを作成し、次のコードそこに置か:

add_subdirectory(projects/test) 
add_subdirectory(lib/testlib) 

あなたがこれを行った場合、あなたはテスト/ CMakeLists.txtにtarget_link_libraries(test testlib)を行うことができますし、それが自動的になりますtestlibで何かを変更すると再構築されます。

関連する問題