美文网首页
CMake动态库的安装

CMake动态库的安装

作者: 天冷就回来 | 来源:发表于2019-08-14 15:46 被阅读0次

    现在有一个库工程,源码目录如下:

    目录结构

    其编译脚本CMakelist.txt内容如下:

    cmake_minimum_required(VERSION 3.5)
    project(xylib C)
    
    
    #add_library(xylib SHARED xyapicore.c)
    add_library(xylib SHARED xyapicore.c xylib1.c xylib2.c xylib3.c)
    
    set_target_properties(xylib PROPERTIES VERSION 1.2 SOVERSION 1)
    include(GNUInstallDirs)
    
    install(TARGETS xylib
        RUNTIME DESTINATION bin
        LIBRARY OPTIONAL NAMELINK_SKIP DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libg COMPONENT RUNTIME 
        ARCHIVE DESTINATION libstatic
        )
    

    从脚本中可以看出,是编译出一个动态链接库, 名字为xylib
    set_target_properties命令设置了该动态链接库的soname为1.2, soversion为1.

    install指令是安装指令。

    LIBRARY OPTIONAL NAMELINK_SKIP DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libg COMPONENT RUNTIME
    

    1.动态链接库的版本号管理和链接

    这个参数是指定共享库的目录放在默认路径的lib目录下。 NAMELINK_SKIP 是跳过soname链接。

    编译后的文件结构如下:

    NAMELINK_SKIP参数

    如果改用 NAMELINK_ONLY参数呢:
    删除xypack安装目录。并修改共享库的安装路径:

    LIBRARY OPTIONAL NAMELINK_ONLY DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libg COMPONENT RUNTIME 
    
    更新指令

    得到的结果如下:

    NAMELINK_ONLY参数

    如果默认的情况呢:

    LIBRARY DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libg COMPONENT RUNTIME 
    

    更新之后如图:

    默认情况

    总结:

    名称 产生SONAME吗 产生SOVERSION吗 产生SO文件吗
    defalut Y Y Y
    NAMELINK_SKIP Y Y N
    NAMELINK_ONLY N N Y

    2. 动态链接库的分配置安装

    在cmake的install指令中大都有CONFIGURATIONS参数。如下修改后的文件

    cmake_minimum_required(VERSION 3.5)
    
    project(xylib C)
    
    
    #add_library(xylib SHARED xyapicore.c)
    add_library(xylib SHARED xyapicore.c xylib1.c xylib2.c xylib3.c)
    
    set_target_properties(xylib PROPERTIES VERSION 1.2 SOVERSION 1)
    include(GNUInstallDirs)
    
    install(TARGETS xylib
        CONFIGURATIONS DEBUG
        RUNTIME DESTINATION bin
        LIBRARY DESTINATION debug/${CMAKE_INSTALL_INCLUDEDIR}/libg COMPONENT RUNTIME 
        ARCHIVE DESTINATION libstatic
        )
        
    install(TARGETS xylib
        CONFIGURATIONS RELEASE
        RUNTIME DESTINATION bin
        LIBRARY DESTINATION release/${CMAKE_INSTALL_INCLUDEDIR}/libg COMPONENT RUNTIME 
        ARCHIVE DESTINATION libstatic
        )
    

    我们配置了debug和release两种配置。并把生成的so库文件放到不同的目录上。

    我们使用ccmake进行编译环境设置:

    mkdir build && cd build
    ccmake ../

    修改CMAKE_BUILD_TYPE 编译类型为 DEBUG, 并修改 CMAKE_INSTALL_PREFIX 安装目录前缀为xypack. 然后按c,再输入g来生成配置缓存CMakeCache.txt。

    ccmake编辑界面 生成的配置缓存文件

    现在来编译:

    make && make install

    编译结果

    现在再运行

    ccmake ../
    

    修改 CMAKE_BUILD_TYPE 为 RELEASE,并更新配置文件

    编译结果

    可见安装的目录到了release目录下

    效果

    相关文章

      网友评论

          本文标题:CMake动态库的安装

          本文链接:https://www.haomeiwen.com/subject/skagjctx.html