如何防止 CMake 在构建时(而非安装时)为共享库创建符号链接?

问题描述 投票:0回答:1

我正在使用 CMake 使用 Bullet3 在 Linux 上构建一个项目,并且在构建整个解决方案时,它会构建 Bullet 的输出库并附加 SOVERSION 并创建一个没有版本的符号链接。

我不喜欢我的特定场景的这种行为,我不想编辑 bullet 子模块的 CMakeLists 文件。

这是我的 CMake,其中包含项目符号库:

    set(USE_DOUBLE_PRECISION ON CACHE BOOL "" FORCE)
    set(BUILD_SHARED_LIBS ON CACHE BOOL "" FORCE)
    
    set(BUILD_BULLET3 OFF CACHE BOOL "" FORCE)
    set(BUILD_EGL OFF CACHE BOOL "" FORCE)
    set(BUILD_ENET OFF CACHE BOOL "" FORCE)
    set(BUILD_PYBULLET OFF CACHE BOOL "" FORCE)
    set(BUILD_OPENGL3_DEMOS OFF CACHE BOOL "" FORCE)
    set(BUILD_BULLET2_DEMOS OFF CACHE BOOL "" FORCE)
    set(BUILD_EXTRAS OFF CACHE BOOL "" FORCE)
    set(BUILD_UNIT_TESTS OFF CACHE BOOL "" FORCE)
    
    set(INSTALL_LIBS OFF CACHE BOOL "" FORCE)
    set(USE_MSVC_RUNTIME_LIBRARY_DLL OFF CACHE BOOL "" FORCE)
    set(USE_GRAPHICAL_BENCHMARK OFF CACHE BOOL "" FORCE)
    set(USE_SOFT_BODY_MULTI_BODY_DYNAMICS_WORLD OFF CACHE BOOL "" FORCE)
    set(BUILD_CPU_DEMOS OFF CACHE BOOL "" FORCE)
    set(USE_GLUT OFF CACHE BOOL "" FORCE)
    SET(INTERNAL_CREATE_MSVC_RELATIVE_PATH_PROJECTFILES OFF CACHE BOOL "" FORCE)
    SET(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES OFF CACHE BOOL "" FORCE)

    add_subdirectory("${PROJECT_SOURCE_DIR}/src/bullet3")

我希望生成的项目符号库在构建目录中每个库只有一个文件,而不是两个,不管它是否附加了版本……我只是不想要那里的符号链接。

我知道我可以在删除这些之后简单地运行一个脚本,但这会破坏我的工作流程。

肯定有办法告诉 CMake 不要那样做?

我读过有关

NAMELINK_SKIP
的内容,但如果我理解正确,那是针对
INSTALL
命令的,但我什至没有使用 install 命令,我也不打算在我的项目中使用,我目前正在获取符号链接与初始构建。

c++ linux cmake bulletphysics
1个回答
0
投票

您正在说话的目标可能具有

VERSION
SOVERSION
属性集之一或两者。
VERSION
SOVERSION
目标属性状态的 CMake 文档(添加了重点):

对于共享库

VERSION
SOVERSION
可分别用于指定构建版本和 API 版本。 构建或安装时如果平台支持符号链接并且链接器支持so-names,则会创建适当的符号链接。如果仅指定两者之一,则假定缺少的具有相同的版本号。

您可以使用以下方法取消设置它们:

set_propert(TARGET target_name_here PROPERTY VERSION)
set_propert(TARGET target_name_here PROPERTY SOVERSION)

上面的代码将在之后

add_subdirectory("${PROJECT_SOURCE_DIR}/src/bullet3")
.

这也意味着安装没有符号链接,所以如果你仍然想要安装的符号链接,我不知道你会怎么做。

© www.soinside.com 2019 - 2024. All rights reserved.