如何使用 CMake 来构建一个共享库(动态库)

发布时间:2024年01月07日

tutorial_4/CMakeLists.txt

# 声明要求的 cmake 最低版本
cmake_minimum_required( VERSION 2.8 )

# 声明一个 cmake 工程
project( HelloSLAM )

add_subdirectory(src)

tutorial_4/src/CMakeLists.txt

#工程添加多个特定的头文件搜索路径
include_directories(include)

set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
# 共享库
add_library( tutorial_4 SHARED tutorial_4.cpp)

tutorial_4/src/tutorial_4.cpp

//这是一个库文件
#include <iostream>
using namespace std;


/**
 * 代码作者:小秋SLAM实战教程
 * 开发环境:Ubuntu 16.04
 * 运行依赖:C++ 11
 */

void printHello()
{
    std::cout<<"小秋SLAM实战教程"<<std::endl;
}


tutorial_4/src/tutorial_4.h

#ifndef LIBHELLOSLAM_H_
#define LIBHELLOSLAM_H_
// 上面的宏定义是为了防止重复引用这个头文件而引起的重定义错误

void printHello();

#endif

add_library( tutorial_4 SHARED tutorial_4.cpp )
“tutorial_4”是生成共享库的名字,“tutorial_4.cpp”是生成共享库的文件。
共享库的名字会默认加上前缀"lib"和"后缀.so"。
在这里插入图片描述

这个示例展示了如何使用 CMake 来构建一个共享库(动态库)。在此项目中,共享库是由 tutorial_4.cpp 源文件构建的,并将输出到项目目录下的 lib 子目录中。下面是详细的文件解释和构建过程:

项目的结构如下所示:

/tutorial_4
|-- CMakeLists.txt
|-- /src
    |-- CMakeLists.txt
    |-- tutorial_4.cpp
    |-- tutorial_4.h

根目录的 CMakeLists.txt

位于 tutorial_4CMakeLists.txt 文件负责整个项目的顶级配置。

cmake_minimum_required(VERSION 2.8)
project(HelloSLAM)
add_subdirectory(src)

这个文件设置了 CMake 的最低版本要求,定义了项目名称,并添加了 src 子目录到构建中。

src 目录的 CMakeLists.txt

位于 tutorial_4/srcCMakeLists.txt 文件用于配置源代码目录,并生成共享库。

include_directories(include)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
add_library(tutorial_4 SHARED tutorial_4.cpp)
  • include_directories(include):包含头文件的目录。
  • set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib):设置库文件的输出路径为项目根目录下的 lib 文件夹。
  • add_library(tutorial_4 SHARED tutorial_4.cpp):创建一个名为 tutorial_4 的共享库(动态库),源文件为 tutorial_4.cpp

tutorial_4.cpp 和 tutorial_4.h

tutorial_4.cpptutorial_4.h 定义了一个简单的函数 printHello,该函数打印一条消息。

构建过程

  1. 创建一个构建目录:在项目根目录中创建一个新目录,例如 build,用于存放构建文件。

  2. 运行 CMake:从 build 目录运行 cmake .. 命令以生成 Makefile。

  3. 编译项目:在 build 目录中运行 make 命令来编译项目。

  4. 检查生成的库:生成的共享库 libtutorial_4.so 将位于 lib 目录中。

总结

这个示例展示了如何使用 CMake 创建一个共享库(动态库)。通过在 CMakeLists.txt 文件中指定库的类型和源文件,CMake 可以自动处理编译过程,生成共享库文件。共享库适用于那些需要动态加载或节省内存空间的应用场景。这种方法对于管理大型项目中的库非常有用,因为它提供了清晰和灵活的方式来组织代码。

文章来源:https://blog.csdn.net/qq_21950671/article/details/135442582
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。