2013-02-15 86 views
3

我們試圖使用Linux,Solaris等使用的共享庫命名約定,在Mac OS X上使用CMake構建共享庫,即libfoo.so.1而不是libfoo.1.dylib。這適用於內部部署,我們擁有現有的Linux部署,並且希望在其之後建模Mac OS X部署,以便不必修改其他工具。CMake:覆蓋Mac OS X libfoo.1.dylib命名約定爲libfoo.so.1

我能夠改變.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的源代碼進行了搜索,無法找到此代碼的設置位置。

回答

5

在方法cmTarget::ComputeVersionedName(請參閱CMake源文件cmTarget.cxx)中,將版本名稱放在後綴.dylib之前的行爲是針對Mac OS X的硬編碼。

但是你可以欺騙的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()