如何防止 CMake 在构建时(而不是在安装时)为共享库创建符号链接?
How can I prevent CMake from creating a symlink for shared libraries on build (not on install)?
我正在使用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")
我希望生成的项目符号库在构建目录中的每个库只有一个文件,而不是两个,无论它是否附加了版本都没关系......我只是不想要那里的符号链接。
我知道我可以简单地运行一个脚本来删除这些,但这会大大破坏我的工作流程。
肯定有办法告诉CMake不要那样做吧?
我已经阅读了有关NAMELINK_SKIP
的信息,但是如果我理解正确,这是针对INSTALL
命令的,但我什至没有使用安装命令,也不打算在我的项目中使用,我目前正在通过初始构建获取符号链接。
您所说的目标可能设置了VERSION
和SOVERSION
属性之一或两者。VERSION
和SOVERSION
目标属性状态的 CMake 文档(强调已添加(:
对于共享库,
VERSION
和SOVERSION
分别用于指定构建版本和 API 版本。在构建或安装适当的符号链接时,如果平台支持符号链接并且链接器支持名称,则会创建相应的符号链接。如果只指定了两者中的一个,则假定缺少的版本号相同。
您可以做的是使用以下方法取消设置它们:
set_property(TARGET target_name_here PROPERTY VERSION)
set_property(TARGET target_name_here PROPERTY SOVERSION)
上面的代码将在add_subdirectory("${PROJECT_SOURCE_DIR}/src/bullet3")
之后。
这也意味着安装没有符号链接。如果您仍然想为安装提供符号链接,我不知道您会怎么做。
相关文章:
- 使用Boost Interprocess创建托管共享内存需要很长时间
- 在为LINUX创建共享库时,如何避免STL的私有/弱副本
- C++共享库:创建和使用
- 在共享缓冲区内存中创建 ::std::string 对象
- 如何创建一个共享对象与另一个.所以在Cmake
- 是否可以/希望创建不可复制的共享指针模拟(以启用weak_ptr跟踪/借用类型语义)?
- 如何防止 CMake 在构建时(而不是在安装时)为共享库创建符号链接?
- 使用Bazel C++教程;build不创建/使用共享库
- 是否可以在专用内存空间中分配一个为提升管理共享内存而创建的对象
- 在创建共享库时,是否可以明确地排除某些类
- 是否可以在并行区域中为共享 2D 数组创建选定元素的线程本地副本?(共享,私有,障碍:OPenMP)
- 为什么从引用创建共享指针会复制对象?
- Android :需要在 c++ NDK 中创建共享首选项对象并存储一些布尔值
- 如何更改在 c++ 中使用提升库创建的共享内存的路径
- 使用多个标头使用 CMake 创建C++共享库
- Qt 创建器:将库移动到 subdir 后无法打开共享对象文件
- 如何从静态c和c++库创建共享c库
- 如何使用 c++ 创建对"everyone"具有共享访问权限的文件夹
- MSVC 2017 在共享库中创建模板函数的副本
- 使用CPACK时,请防止为已安装的共享库创建Namelink