首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMake:覆盖MacOSXlibfoo.1.dylib命名约定为libfoo.so.1

CMake:覆盖MacOSXlibfoo.1.dylib命名约定为libfoo.so.1
EN

Stack Overflow用户
提问于 2013-02-16 04:25:14
回答 1查看 2.1K关注 0票数 4

我们正在尝试在Mac上使用CMake构建共享库,使用Linux、Solaris等使用的共享库命名约定,即libfoo.so.1而不是libfoo.1.dylib。这是针对内部部署的,其中我们有一个现有的Linux部署,并希望在此基础上模拟Mac部署,以便不必修改其他工具。

我可以使用以下命令将.so更改为.dylib

代码语言:javascript
复制
set_target_properties(OpenImageIO
                      PROPERTIES
                      SUFFIX .so)

但是,我无法获得正确的顺序。正在尝试

代码语言:javascript
复制
set_target_properties(OpenImageIO
                      PROPERTIES
                      OUTPUT_NAME libOpenImageIO.so.${SOVERSION})

最终以build/macosx/libOpenImageIO/liblibOpenImageIO.so.32.1.2.0.so结束,这表明OUTPUT_NAME仅用于共享库的基础部分,CMake将始终颠倒后缀和版本的顺序。

我已经搜索了CMake的源代码,但找不到这个代码设置的位置。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-16 21:59:08

将版本名称放在后缀.dylib之前的行为是在方法cmTarget::ComputeVersionedName中为Mac硬编码的(参见CMake源文件cmTarget.cxx)。

但是,您可以通过以下方式设置目标属性来诱使CMake生成所需的名称:

代码语言:javascript
复制
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()
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14902773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档