linux下cmake练手小实例

linux下小试cmake

linux下小试cmake2

linux下使用cmake构建静态库和动态库

linux下,cmake如何使用外部共享库和头文件

linux下cmake练手小实例

linux下使用cmake交叉编译Android可以使用的动态库

一、使用Cmake编译生成so库

要求:用cmake编译生成so库。
目录列表如下:

  • include: 存放头文件的。
    • hello.h: 头文件,下面是头文件的内容
    #ifndef HELLO_H
    #define HELLO_H
    #include <stdio.h>
    void HelloFunc();
    #endif
    
  • lib: 用来存放编译生成的so目录
  • src: 源文件存放目录
    • hello.c: 源文件,下面是源文件的内容
    #include “hello.h”
    void HelloFunc(){
    printf(“Hello World\n”);
    }
    
  • build: 外部编译目录
  • CMakeLists.txt:

目录如上,那么我们应该怎么去写CMakeLists.txt呢?

主要分为以下几个步骤:

  • 1、定义好Cmake编译版本
  • 2、定义一个项目名
  • 3、指定头文件的目录
  • 4、后指定源文件目录
  • 5、指定生成so生成目录
  • 6、指定生成动态库
1、定义好Cmake编译版本
CMAKE_MINIMUM_REQUIRED(VERSION 3.14)
2、定义一个项目名
PROJECT (HELLO)
3、指定头文件的目录
INCLUDE_DIRECTORIES (${PROJECT_SOURCE_DIR}/include)

PROJECT_SOURCE_DIR:工程的顶层目录

4、后指定源文件目录

这个有几种指定方式:

  • 使用 AUX_SOURCE_DIRECTORY 指令

    AUX_SOURCE_DIRECTORY (${PROJECT_SOURCE_DIR}/src SRC_LISTS)
    

    SRC_LISTS: 代表 src 目录下的所有源文件,自定义的名字

  • 使用 FILE 指令

    FILE(GLOB SRC_LISTS_CPP "${PROJECT_SOURCE_DIR}/src/*.cpp" "${PROJECT_SOURCE_DIR}/src/*.c")
    

    也可以分开写

    FILE(GLOB SRC_LISTS_CPP "${PROJECT_SOURCE_DIR}/src/*.cpp")
    FILE(GLOB SRC_LISTS_C "${PROJECT_SOURCE_DIR}/src/*.c")
    
5、指定生成so生成目录
SET (LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
6、指定生成动态库
ADD_LIBRARY (hello SHARED ${SRC_LISTS_CPP} ${SRC_LISTS_C})

编写好CmakeList.txt文件之后,具体指令如下。

cd build
cmake ..
make

好了,到这so库就生成好了。当然这个so只能在linux上使用,是无法在andrid上使用的如果想要在android上使用,需要用到ndk交叉编译。至于交叉编译能够在android上使用的so库,咱们下一章再讲。

现在,先讲解一下在linux上怎么使用这个so库。

二、链接外部动态库与头文件

上面说了生成动态库的步骤,那生成好的动态库怎么去使用呢?

当我们要使用生成好的so动态库的时候,也需要之前生成动态库的头文件,头文件不要忘了。

新建工程目录,目录列表如下:

  • include: 存放头文件的。
    • hello.h: 这个头文件,就是上面生成动态库时的头文件
    #ifndef HELLO_H
    #define HELLO_H
    #include <stdio.h>
    void HelloFunc();
    #endif
    
  • lib: 用来存放编译生成的so目录
    • hello.so: 上面生成的so动态库
  • src: 源文件存放目录
    • useSO.c: 源文件,下面是源文件的内容
    #include "hello.h"
    int  main(){
        HelloFunc();
        return 0;
    }
    
  • build: 外部编译目录
  • CMakeLists.txt:

上面是整个工程目录,现在就剩下怎么去编写CMakeLists.txt文件了。

编写步骤如下:

  • 1、指定 CMake 的最低编译版本
  • 2、定义一个项目名
  • 3、指定外部so动态库需要的头文件存放目录
  • 4、指定外部so动态库的存放目录
  • 5、生成可执行文件
  • 6、将动态库链接到执行文件中
1、定义好Cmake编译版本
CMAKE_MINIMUM_REQUIRED(VERSION 3.14)
2、定义一个项目名
PROJECT (HELLO)
3、指定外部so动态库需要的头文件存放目录
INCLUDE_DIRECTORIES (${PROJECT_SOURCE_DIR}/include)

PROJECT_SOURCE_DIR:工程的顶层目录

4、指定外部so动态库的存放目录
LINK_DIRECTORIES (${PROJECT_SOURCE_DIR}/lib)
5、生成可执行文件
ADD_EXECUTABLE (useSo ${PROJECT_SOURCE_DIR}/src/useSo.c)
6、将动态库链接到执行文件中
TARGET_LINK_LIBRARIES(useSo hello)

编写好CmakeList.txt文件之后,具体指令如下。

cd build
cmake ..
make
./useSo

当然你也可以写一个脚本来干这事,
脚本名字: use_so_build.sh
脚本内容:

rm -rf build
mkdir build
cd build
cmake ..
make
./useSo

然后直接运行脚本就可以了

./use_so_build.sh

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值