プロジェクトの一部としてビルドされ、リンクされているライブラリがあります。オプションでライブラリをシステム全体 (または ${CMAKE_INSTALL_PREFIX} が設定されている場所) にインストールする機能を提供したいと考えています。それ以外の場合、デフォルトでは、プロジェクトの最終ビルド プロダクトはライブラリに静的にリンクされ、前者はインストールされますが、ライブラリ バイナリはビルド ディレクトリに残ります。
言い換えると:
$ make
$ make install
プログラムをビルドしてインストールしますが、次のようなものだけです
$ make install.foo
ライブラリを ${CMAKE_INSTALL_PREFIX} にインストールし、必要に応じて最初にビルドします。
これまでのところ、次のようなものがあります(実際のスクリプトから単純化されているため、エラーがある可能性があります):
INCLUDE_DIRECTORIES( "${CMAKE_CURRENT_LIST_DIR}")
SET (FOO_LIBRARY "foo")
# Following builds library and makes it available to
# be linked other targets within project by:
# TARGET_LINK_LIBRARIES(${progname} ${FOO_LIBRARY})
ADD_LIBRARY(${FOO_LIBRARY}
foo/foo.cpp # and other sources ...
)
###########################################################
# Approach #1
# -----------
# Optionally allow users to install it by invoking:
#
# cmake .. -DINSTALL_FOO="yes"
#
# This works, but it means that users will have to run
# cmake again to switch back and forth between the libary
# installation and non-library installation.
#
OPTION(INSTALL_FOO "Install foo" OFF)
IF (INSTALL_FOO)
INSTALL(TARGETS ${FOO_LIBRARY} DESTINATION lib/foo)
SET(FOO_HEADERS foo/foo.h)
INSTALL(FILES ${FOO_HEADERS} DESTINATION include/foo)
UNSET(INSTALL_FOO CACHE)
ENDIF()
###########################################################
###########################################################
# Approach #2
# -----------
# Optionally allow users to install it by invoking:
#
# make install.foo
#
# Unfortunately, this gets installed by "make install",
# which I want to avoid
SET(FOO_INSTALL "install.foo")
ADD_CUSTOM_TARGET(${FOO_INSTALL}
COMMAND ${CMAKE_COMMAND}
-D COMPONENT=foo
-P cmake_install.cmake)
ADD_DEPENDENCIES(${FOO_INSTALL} ${FOO_LIBRARY})
INSTALL(TARGETS ${FOO_LIBRRARY}
DESTINATION lib/foo COMPONENT foo)
SET(FOO_HEADERS foo/foo.h)
INSTALL(FILES ${FOO_HEADERS}
DESTINATION include/foo COMPONENT foo)
###########################################################
ご覧のとおり、#1 の方法で動作しますが、ライブラリをインストールするために必要な手順は次のとおりです。
$ cmake .. -DINSTALL_FOO="yes"
$ make && make install
そして、「通常の」ビルドに戻るには、ユーザーは「-DINSTALL_FOO」オプションなしで cmake を再度実行することを忘れないでください。そうしないと、次の「make install」でライブラリがインストールされます。
2 番目の方法は、「make install.foo」を実行すると機能しますが、「make install」を実行するとライブラリもインストールされます。後者は避けたい。
これを達成する方法について何か提案はありますか?