ZOl*_*ier 5 c++ linux cmake bulletphysics
我正在使用 CMake 在 Linux 上使用 Bullet3 构建一个项目,在构建整个解决方案时,它会构建附加了 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")
Run Code Online (Sandbox Code Playgroud)
我希望生成的项目符号库在构建目录中每个库只有一个文件,而不是两个,无论是否附加版本都无关紧要...我只是不想在那里有符号链接。
我知道我可以简单地运行一个脚本来删除它们,但这会严重破坏我目前的工作流程。
肯定有办法告诉 CMake 不要这样做吗?
我已经读过,NAMELINK_SKIP但如果我理解正确,那就是命令INSTALL,但我什至没有使用安装命令,而且我不打算在我的项目中使用,我目前仅在初始构建中获取符号链接。
您所说的目标可能设置了VERSION和SOVERSION属性中的一个或两个。VERSION和目标属性状态的 CMake 文档SOVERSION(添加了重点):
对于共享库
VERSION, 和SOVERSION可用于分别指定构建版本和 API 版本。构建或安装时,如果平台支持符号链接并且链接器支持 so-names ,则会创建适当的符号链接。如果仅指定两者之一,则假定缺少的版本号具有相同的版本号。
您可以做的是使用以下命令取消它们:
set_property(TARGET target_name_here PROPERTY VERSION)
set_property(TARGET target_name_here PROPERTY SOVERSION)
Run Code Online (Sandbox Code Playgroud)
上面的代码将放在.add_subdirectory("${PROJECT_SOURCE_DIR}/src/bullet3")
这也意味着安装没有符号链接。如果您仍然想要安装符号链接,我不知道该怎么做。