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

np8igboo  于 2023-02-23  发布在  其他
关注(0)|答案(1)|浏览(269)

我使用CMake在Linux上构建了一个带有Bullet3的项目,在构建整个解决方案时,它构建了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")

我希望生成的bullet libs在build目录中每个库只有一个文件,而不是两个,不管它是否附加了版本号...我只是不希望在那里有符号链接。
我知道我可以简单地运行一个脚本后,删除这些,但这将打破我的工作流程大的时间在此刻。
肯定有办法告诉CMake不要这么做吧?
我读过关于NAMELINK_SKIP的文章,但是如果我理解正确的话,这是针对INSTALL命令的,但是我甚至没有使用install命令,我也不打算在我的项目中使用,我目前只是在初始构建时获得符号链接。

r9f1avp5

r9f1avp51#

您所讲的目标可能设置了VERSIONSOVERSION属性中的一个或两个。VERSIONSOVERSION目标属性的CMake文档声明(强调部分由作者标明):
对于共享库,VERSIONSOVERSION可分别用于指定构建版本和API版本。在构建或安装时,如果平台支持符号链接并且链接器支持同名,则会创建相应的符号链接。如果仅指定两者之一,则假定缺少的符号链接具有相同的版本号。
您可以使用以下命令取消设置它们:

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

上面的代码应该在add_subdirectory("${PROJECT_SOURCE_DIR}/src/bullet3")之后。
这也意味着没有符号链接用于安装,所以如果你仍然想有符号链接用于安装,我不知道你会怎么做。

相关问题