2

プロジェクトの一部としてビルドされ、リンクされているライブラリがあります。オプションでライブラリをシステム全体 (または ${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」を実行するとライブラリもインストールされます。後者は避けたい。

これを達成する方法について何か提案はありますか?

4

2 に答える 2

-1

このソリューションが機能するかどうかを確認してください。

使いたいと言ったものとは異なるコマンドを使用する必要がありますが、問題はかなりうまく解決されていると思います。

于 2013-06-19T22:35:02.333 に答える