私は2つのサブディレクトリプロジェクト(add_subdirectoryで追加)を持っており、それぞれ独自のライブラリ、バイナリ、インストール/アンインストールのターゲットを持っています。だから、:CMakeサブディレクトリのインストール/アンインストールのターゲット
main_project
|
|--CMakeLists.txt
|--src/
|--CMakeLists.txt (with binary target, install()
|
|--project_a
|--CMakeLists.txt
|--src/
|--CMakeLists.txt (with library, install())
|
|--project_b
|--CMakeLists.txt
|--src/
|--CMakeLists.txt (with library, install())
私は自動的にライブラリをインストールするには、トップレベルプロジェクト(main_project)のために希望とB(target_link_librariesからmain_projectに含まれて())。
cd main_project/build
cmake ..
make
sudo make install
を、自動的にインストールmain_projectバイナリとproject_a/Bライブラリを持っている:だから、私は行くことができるようにしたいと思います。予想通り
main_project/src/CMakeLists.txt
...
install(FILES main project_a project_b DESTINATION bin
LIBRARY DESTINATION lib)
しかし
install TARGETS given target "project_a" which does not exist in this directory.
でcmake ..
結果:私はこれを試してみました。私もパスを指定して試してみた
:
main_project/src/CMakeLists.txt
...
install(FILES main ${CMAKE_SOURCE_DIR}/project_a/ ${CMAKE_SOURCE_DIR}/project_b DESTINATION bin
LIBRARY DESTINATION lib)
もproject_a/bがこのディレクトリにないと文句を言いた(も期待、私は推測?)
私はまた、インストールしようとしましたライブラリはinstall()のFILESオプションを使って "手作業"で動作しますが、それはうまくいきますが、サブプロジェクトに完全に良いinstall()があると考えると非常にクルージングです。
project_aとproject_bもuninstall()カスタムターゲットを持っているので、main_projectにアンインストールターゲットを追加することはできません。
CMake Error at CMakeLists.txt:37 (add_custom_target):
add_custom_target cannot create target "uninstall" because another
target with the same name already exists. The existing target is a
custom target created in source directory "/main_project/project_a".
See documentation for policy CMP0002 for more details.
をだから、どのように私はインストールして、必要に応じてアンインストールしない:私のproject_aはアンインストールディレクティブを持っているので、私が得る、
add_custom_target(uninstall
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
をしかし、私はトップディレクトリCMakeListsにアンインストールディレクティブを追加しようとすると私のmain_projectと一緒に私のサブプロジェクトのライブラリファイル?
あなたが望むものをあなたが持っているとどのようなクリアされていません。試したコードを私たちに教えてください。 – Tsyvarev
私が試したことを含むように編集されました。助けてくれてありがとう。 – Allan
サブプロジェクトの* CMakeLists.txt *は既に 'install()'コマンドを発行しているので、メインプロジェクトはそれをインストールするために何もする必要はありません。 「アンインストール」に関しては、サブプロジェクトがすでにターゲットを指定しているので、メインプロジェクトで作成することはできません。ところで、サードパーティ製のサブプロジェクトの場合、コードを変更できない(または変更したくない)場合は、[ExternalProject_Add](https://cmake.org/cmake/help/v3.0/)を使用することをお勧めします。 module/ExternalProject.html)を作成してビルドします。メインプロジェクトでのサブプロジェクトのインストールでは、 'install(SCRIPT)'や 'install(CODE)'を使うことができます。 – Tsyvarev