ライブラリをLIBRARY_OUTPUT_PATHにコピーするカスタムターゲットを作成しようとしています。以下は私のCMakeLists.txtです。ライブラリをコピーするカスタムターゲットを作成する方法は?
MYCOMPONENTフォルダの内容は、mylib.soとCMakeLists.txtです。
cmake_minimum_required(VERSION 2.8)
project(MYCOMPONENT)
add_custom_target(MYTARGET
COMMAND ${CMAKE_COMMAND} -E copy ./mylib.so ${LIBRARY_OUTPUT_PATH})
私は次のようにします。
cd MYCOMPFOLDER
mkdir build_debug
cd build_debug
cmake -DLIBRARY_OUTPUT_PATH=<mycompfolderfullpath>/build_debug/bin ..
今私はbuild_debugのLSを行うと、私が手:
CMakeCache.txt CMakeFiles cmake_install.cmake Makefileの
ls CMakeFiles/
3.5.1 CMakeTmp Makefile2
cmake.check_cache feature_tests.bin Makefile.cmake
CMakeDirectoryInformation.cmake feature_tests.c progress.marks
CMakeOutput.log feature_tests.cxx TargetDirectories.txt
CMakeRuleHashes.txt MYCOMPONENT.dir
ls CMakeFiles/MYCOMPONENT.dir/
build.make cmake_clean.cmake DependInfo.cmake progress.make
からbuild_debug、 "find。-name mylib.so"はどこにもないので、もちろん "make MYTARGET"は失敗します。 cmakeにmylib.soを適切に処理させるにはどうすればよいですか?これはサードパーティ製のライブラリですが、構築しません。ターゲットはこのフォルダからLIBRARY_OUTPUT_PATHにコピーされ、他のコンポーネントがそこからリンクできるようにすることです。
私が正しくundestandした場合、ビルドディレクトリに 'mylib.so'が存在しないので、copiingは失敗します。明らかに、成功したコピーのためにファイルへの正しいパスを指定する必要があります。 **質問とは何ですか?**あなたのマシンに 'mylib.so'がどこにあるのか尋ねますか?あなただけがそれを知っています。 – Tsyvarev
ソースツリー外のビルドを実行すると、cmakeはソースフォルダのファイルを新しいツリーにコピーします - mylib.soはコピーされず、CMakeLists.txtファイルのみがコピーされます。それが私が求めていることです。なぜ私のワークスペース内の他のすべてのファイルと同様に、ソースツリー外のパスにコピーされません。私はファイルがどこにあるのか知っています。これが普通のcmakeの振る舞いであれば、../mylib.so(build_debugフォルダに関連して)をコピーしますが、ソースツリー外のビルドはこのファイルをコピーします。ソースツリー内の唯一のバイナリファイルではありません。シェーダもあらかじめコンパイルされています。 – cspiral
あなたは間違っています:**何も**ソースツリー*から*バイナリツリー*に自動的にはコピーされません。慎重に:ビルドツリーに 'CMakeLists.txt'はありません。いずれにしても、 'mylib.so'を他の場所にコピーしたい場合は、ソースツリー(' $ {CMAKE_SOURCE_DIR}/mylib.so')からコピーしてください。 – Tsyvarev