我们正在尝试使用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)
但是,我无法正确订购。试图
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的源代码,无法找到此代码的设置位置。
答案 0 :(得分:6)
将版本名称放在后缀.dylib
前面的行为在方法cmTarget::ComputeVersionedName
中为Mac OS X进行了硬编码(请参阅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()