我使用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命令,我也不打算在我的项目中使用,我目前只是在初始构建时获得符号链接。
1条答案
按热度按时间r9f1avp51#
您所讲的目标可能设置了
VERSION
和SOVERSION
属性中的一个或两个。VERSION
和SOVERSION
目标属性的CMake文档声明(强调部分由作者标明):对于共享库,
VERSION
和SOVERSION
可分别用于指定构建版本和API版本。在构建或安装时,如果平台支持符号链接并且链接器支持同名,则会创建相应的符号链接。如果仅指定两者之一,则假定缺少的符号链接具有相同的版本号。您可以使用以下命令取消设置它们:
上面的代码应该在
add_subdirectory("${PROJECT_SOURCE_DIR}/src/bullet3")
之后。这也意味着没有符号链接用于安装,所以如果你仍然想有符号链接用于安装,我不知道你会怎么做。