我们正在尝试使用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的源代码,无法找到此代码的设置位置.
将版本名称放在后缀前面的行为.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)
| 归档时间: |
|
| 查看次数: |
1742 次 |
| 最近记录: |