7

libfoo.soso-versioningを使用している場合のように、CMakeが共有ライブラリのシンボリックリンクを作成しないようにする方法はありますか(つまり、のようなものがあることを意味しますlibfoo.so.0.8)?

私がこれを尋ねている理由は、そのプロジェクトの複数のバージョンを並行してインストールできるようにしたいプロジェクトがあるからです。ただし、ほとんどのパッケージ マネージャーは、シンボリック リンクのようなファイルが複数のパッケージに存在する場合、並列インストールを拒否します。

背景情報として: 私たちは CPack を使用してパッケージをビルドしていますが、最終的には、このシンボリック リンクを防止できない、または少なくとも debian などの開発パッケージとランタイム パッケージを分離できないのは CPack の欠陥だと思います。ただし、これまでのところ、CMake がシンボリック リンクをまったく作成しないようにすることは、CPack にパッチを適用するよりも簡単なことかもしれないという幻想を抱いています。

4

1 に答える 1

11

共有ライブラリの場合、 install コマンドNAMELINK_SKIPのオプションを使用して、バージョン管理されたライブラリ ファイルへのバージョン管理されていないライブラリ名のシンボリック リンクが生成されないようにすることができます。生成された CPack インストーラーは、インストール時にその設定を尊重します。ライブラリ バージョンは、共有ライブラリ ターゲットのプロパティを設定して指定する必要があります。SOVERSION

次のサンプル コードは、必要な手順を示しています。

add_library(foo SHARED foo.c)

set_target_properties(foo PROPERTIES SOVERSION "0.8")

install(TARGETS foo LIBRARY DESTINATION lib NAMELINK_SKIP)

include(CPack)
于 2012-08-08T18:33:43.337 に答える