美文网首页
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动态库的安装

    现在有一个库工程,源码目录如下: 其编译脚本CMakelist.txt内容如下: 从脚本中可以看出,是编译出一个动...

  • CMake文件配置

    cmake版本 cmake_minimum_required(VERSION 3.4.1) 设置生成的so动态库最...

  • INSTALL Library TARGETS given no

    在windows下使用cmake的install命令安装生成的动态库的时候,需要使用解决办法是使用RUNTIME而...

  • android JNI 报错:error: undefined

    编译报错 报错原因:jnigraphics库没有动态链接 解决 Cmake编译解决添加动态链接库 jnigraph...

  • Mac下 CMake 安装及环境配置

    编译hadoop的native库需要用到cmake,因此需要安装cmake。 在cmake官网[https://c...

  • Cmake简介

    cmake 简而言之,cmake是Android Ndk开发过程中用到的C/C++编译工具,用来生成动态库(.so...

  • Ubuntu通过资源包安装CMake

    项目要用的cmake库需要3.21以上,apt-get install安装的cmake到不了这么高版本,只能从资源...

  • LNMP安装教程:安装mysql

    安装Mysql前需要安装cmake 1.安装cmake 下载cmake wget http://www.cmake...

  • ubuntu配置opencv3.4.1

    下载opencv3.4.1,并安装cmake接着安装依赖库。sudo apt-get install build-...

  • 动态注册和线程

    Jni_Onloadas开发ndk安装的工具sdktool: CMake:编译工具 LLDB:调试 动态注册和静态...

网友评论

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

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