我正在使用 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 命令,我也不打算在我的项目中使用,我目前正在获取符号链接与初始构建。
您正在说话的目标可能具有
VERSION
和 SOVERSION
属性集之一或两者。 VERSION
和 SOVERSION
目标属性状态的 CMake 文档(添加了重点):
和VERSION
可分别用于指定构建版本和 API 版本。 构建或安装时如果平台支持符号链接并且链接器支持so-names,则会创建适当的符号链接。如果仅指定两者之一,则假定缺少的具有相同的版本号。SOVERSION
您可以使用以下方法取消设置它们:
set_propert(TARGET target_name_here PROPERTY VERSION)
set_propert(TARGET target_name_here PROPERTY SOVERSION)
上面的代码将在之后
add_subdirectory("${PROJECT_SOURCE_DIR}/src/bullet3")
.
这也意味着安装没有符号链接,所以如果你仍然想要安装的符号链接,我不知道你会怎么做。