2013-03-14 3 views
8

私のプロジェクトにはサードパーティのライブラリ(google test、zlib、...)を含むフォルダがあります。私はこのライブラリがすべてビルドされているときにライブラリを共通のフォルダに入れたいと思っています。私はcmakeでこれをやろうとしていますが、私は問題があります。私はこのコードをしようとしている:cmakeでビルドした後にlibsをコピーまたは移動する

add_subdirectory(gtest-1.6.0)  
add_custom_command(
      TARGET gtest_main 
      POST_BUILD 
      COMMAND ${CMAKE_COMMAND} -E copy ${SRC_LIB_DIR}/*.a ${DST_LIB_DIR}) 

私は問題があなたのCMakeListsでCMAKE_LIBRARY_OUTPUT_DIRECTORY変数を設定した場合は、このレベルではなく、低いレベル

答えて

8

で定義されていないで、ターゲットがGTESTメインということができると思います。 txtを呼び出す前にadd_subdirectory(サブプロジェクトはそれを上書きしません)、ライブラリは適切な場所に収まる必要があります。

このように、サブプロジェクトのターゲットは、出力ファイルへの依存関係を保持します。あなたのコピーではうまくいかないでしょう。目標は常に古くなって再構築されます。

EDIT:あなたのコピーコマンドが.a-filesをコピーしているのを見落としました。@ Fraserのコメントのおかげで、私は同様にCMAKE_ARCHIVE_OUTPUT_DIRECTORYがそのトリックを行うべきだということを学びました。

+0

動作しません。このコードを作る:SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY "$ {PROJECT_BINARY_DIR}/third_party/lib/release")そしてgtestサブディレクトリを追加しても何もしません。ライブラリは常にルートディレクトリgtestに移動します。 – Killrazor

+4

gtestはデフォルトで 'STATIC'ライブラリをビルドしているので、[' CMAKE_ARCHIVE_OUTPUT_DIRECTORY'](http://www.cmake.org/cmake/help/v2.8.10/cmake.html#prop_tgt:ARCHIVE_OUTPUT_DIRECTORY)ではなく、 'SHARED'ライブラリ用の' CMAKE_LIBRARY_OUTPUT_DIRECTORY'です。 – Fraser

+0

感謝のフレイザーとパトリック。 CMAKE_ARCHIVE_OUTPUT_DIRECTORYがトリックを行いました。両方のおかげで! – Killrazor

関連する問題