我们正在尝试在Mac上使用CMake构建共享库,使用Linux、Solaris等使用的共享库命名约定,即libfoo.so.1而不是libfoo.1.dylib。这是针对内部部署的,其中我们有一个现有的Linux部署,并希望在此基础上模拟Mac部署,以便不必修改其他工具。
我可以使用以下命令将.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将始终颠倒后缀和版本的顺序。
我已经搜索了CMake的源代码,但找不到这个代码设置的位置。
发布于 2013-02-16 21:59:08
将版本名称放在后缀.dylib之前的行为是在方法cmTarget::ComputeVersionedName中为Mac硬编码的(参见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()https://stackoverflow.com/questions/14902773
复制相似问题