CMake:将Mac OS X libfoo.1.dylib命名约定覆盖到libfoo.so.1

Bla*_*jac 4 cmake

我们正在尝试使用Linux,Solaris等使用的共享库命名约定在Mac OS X上使用CMake构建共享库,libfoo.so.1而不是libfoo.1.dylib.这是针对我们现有Linux部署的内部部署,并且希望在其后对Mac OS X部署进行建模,以便不必修改其他工具.

我能够改变.so.dylib使用

set_target_properties(OpenImageIO
                      PROPERTIES
                      SUFFIX .so)
Run Code Online (Sandbox Code Playgroud)

但是,我无法正确排序.试

set_target_properties(OpenImageIO
                      PROPERTIES
                      OUTPUT_NAME libOpenImageIO.so.${SOVERSION})
Run Code Online (Sandbox Code Playgroud)

结束了build/macosx/libOpenImageIO/liblibOpenImageIO.so.32.1.2.0.so,这表明OUTPUT_NAME是只对共享库的基部和CMake的将总是反向SUFFIX和VERSION顺序.

我搜索了CMake的源代码,无法找到此代码的设置位置.

sak*_*kra 7

将版本名称放在后缀前面的行为.dylib在方法中为Mac 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()
Run Code Online (Sandbox Code Playgroud)