CMake如何知道将哪些前缀和后缀添加到共享库中?
How does CMake know which prefixes and suffixes to add to shared libraries?
我试图使用INSTALL在CMake复制一些外部二进制文件到安装目录。我的代码是这样的:
SET(SimTK_SHARED_LIBS
SimTKsimbody
SimTKmath
SimTKcommon
SimTKmolmodel
)
INSTALL(TARGETS ${SimTK_SHARED_LIBS}
LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib
)
我得到这个错误:
CMake Error at CMakeLists.txt:216 (INSTALL)安装目标给定的目标"SimTKsimbody",它不存在于此目录。
尽管在当前目录和库目录中都放置了名为libSimTKsimbody.so
和(不正确的)SimTKsimbody
的文件。
有趣的是,这个:
SET(SHARED_MMB_TARGET MMBlib)
ADD_LIBRARY(${SHARED_MMB_TARGET} SHARED
${MMB_LIBRARY_SOURCE_FILES}
${MMB_HEADER_FILES})
SET_TARGET_PROPERTIES(${SHARED_MMB_TARGET}
PROPERTIES
COMPILE_FLAGS "-DMMB_BUILDING_SHARED_LIBRARY"
PROJECT_LABEL "MMBlib (dynamic)")
TARGET_LINK_LIBRARIES(${SHARED_MMB_TARGET}
${SimTK_SHARED_LIBS_D}
${SimTK_SHARED_LIBS}
${OpenMM_SHARED_LIBS_D}
${OpenMM_SHARED_LIBS}
${SimTK_GENERAL_LIBS})
INSTALL(TARGETS ${SHARED_MMB_TARGET}
LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
)
. .工作很好。它将libMMBlib.so
安装在${CMAKE_INSTALL_PREFIX}/lib
中。这是否意味着如果我发出ADD_LIBRARY和/或SET_TARGET_PROPERTIES, INSTALL将只适用于此?SimTK_SHARED_LIBS是单独编译的,我真的不想在这里编译它们。
我考虑过使用INSTALL FILES,只编写代码来处理每个操作系统的库名。然而,我相信CMake有办法为我简单而优雅地做到这一点。
多谢山姆
是的,你应该使用INSTALL(FILES)来安装外部库文件。
CMake使用CMAKE_SHARED_LIBRARY_PREFIX和CMAKE_SHARED_LIBRARY_SUFFIX作为add_library(... SHARED)
创建的库的默认前缀和后缀,所以你可能会期望这些组件来自外部库:
INSTALL(FILES /path/to/library/${CMAKE_SHARED_LIBRARY_PREFIX}SimTKsimbody${CMAKE_SHARED_LIBRARY_SUFFIX}
...)
你也可以使用FIND_LIBRARY来自动(很好地)检查你对库后缀和前缀的期望:
FIND_LIBRARY(SIMTK_SIMBODY_LIB
${CMAKE_SHARED_LIBRARY_PREFIX}SimTKsimbody${CMAKE_SHARED_LIBRARY_SUFFIX}
PATH /path/to/library)
INSTALL(FILES ${SIMTK_SIMBODY_LIB} ...)
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何在C++中从两个单独的for循环中添加两个数组
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- CMake 添加和删除宏定义以编译共享库/可执行文件
- 将自签名证书添加到共享对象C 库
- 英特尔 MKL 和 JNI:如何添加 ld 从中搜索符号的共享库?
- 我应该在源文件之间共享的常量的定义中添加关键字"extern"吗
- 将依赖项添加到现有共享对象库
- 如何将共享库添加到qtCreator
- 将共享库添加到Qt .pro文件中
- Eclipse C++将共享库添加到主项目
- Windows 上的 Cmake 不添加共享库路径(适用于 linux)
- 永久添加 g++ 的包含路径和共享库
- 向vector添加共享指针时出错
- 在Mac OS X上共享一个c++库,这样我就可以在mySQL中添加用户定义的函数
- CMake如何知道将哪些前缀和后缀添加到共享库中?
- 当与共享库链接时,将添加到可执行文件中的内容
- 添加对共享ptr的引用会增加引用计数吗?
- 在PHP扩展中添加两个共享库.谁
- c++尝试添加Peterson算法以避免共享内存中的竞争条件