2012-08-08 15 views
6

バージョン管理(つまり、libfoo.so.0.8のようになります)を使用しているときに、CMakeがlibfoo.soのような共有ライブラリのシンボリックリンクを作成しないようにする方法はありますか?CMakeがインストール時に共有ライブラリのシンボリックリンクを作成しないようにするには?

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

私たちはCPackを使ってパッケージをビルドしています。最終的には、このシンボリックリンクを防ぐことができないか、少なくともdevパッケージとランタイムパッケージを分離することができないCPackの欠陥だと思います。 debianのために。しかし、これまでのところ、私はCMakeがシンボリックリンクを作成するのを妨げるだけで、CPackにパッチを当てるよりも簡単なことかもしれないという幻想を持っています。

答えて

10

共有ライブラリーの場合は、install commandNAMELINK_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) 
関連する問題