4

Mac OS X で CMake を使用して、Linux、Solaris などで使用されている共有ライブラリの命名規則を使用して共有ライブラリを構築しようとしていlibfoo.so.1ますlibfoo.1.dylib。これは、既存の Linux 展開があり、その後に Mac OS X 展開をモデル化して、他のツールを変更する必要がないようにする内部展開用です。

私は使用に変更.soすることができます.dylib

set_target_properties(OpenImageIO
                      PROPERTIES
                      SUFFIX .so)

ただし、正しい順序を取得できません。しようとしている

set_target_properties(OpenImageIO
                      PROPERTIES
                      OUTPUT_NAME libOpenImageIO.so.${SOVERSION})

build/macosx/libOpenImageIO/liblibOpenImageIO.so.32.1.2.0.soこれは、共有ライブラリの基本部分のみを示唆しておりOUTPUT_NAME、CMake は常に SUFFIX と VERSION の順序を逆にします。

CMake のソース コードを検索しましたが、このコードが設定されている場所が見つかりません。

4

1 に答える 1

8

サフィックスの前にバージョン名を付ける動作は、.dylibMac OS X のメソッドでハード コードされていcmTarget::ComputeVersionedNameます (CMake ソース ファイル cmTarget.cxx を参照してください)。

ただし、次の方法でターゲット プロパティを設定することにより、CMake をだまして目的の名前を生成させることができます。

if (APPLE)
    set_property(TARGET OpenImageIO PROPERTY PREFIX "lib")
    set_property(TARGET OpenImageIO PROPERTY OUTPUT_NAME "OpenImageIO.so")
    set_property(TARGET OpenImageIO PROPERTY SUFFIX "")
    set_property(TARGET OpenImageIO PROPERTY SOVERSION "32.1.2.0")
endif()
于 2013-02-16T13:59:08.173 に答える