CMake基础(4)动态库

简介: CMake基础(4)动态库

0x01 介绍

CMake来构建动态库(也称为共享库)。要构建动态库,您需要在CMakeLists.txt中使用CMake的add_library命令,并指定库的类型为SHARED。

学习cmake, 理解了前3节内容 后面都比较简单。

要使用CMake创建动态库,您需要完成以下步骤:

  1. 创建一个名为CMakeLists.txt的文件,并将其放在库的根目录中。
  2. 使用cmake_minimum_required命令指定CMake的最低版本要求。
  3. 使用project命令指定库的名称。使用set命令设置生成文件的输出目录。
  4. 使用include_directories命令指定需要包含的文件夹。
  5. 使用add_library命令添加库的源代码文件。指定库的类型为SHARED。
  6. 下面是一个示例CMakeLists.txt文件,它用于创建一个名为hello_library的动态库

要使用CMake创建可执行文件链接动态库,需要在以上基础上完成以下步骤:

  1. 使用add_executable添加可执行文件代码
  2. 使用target_link_libraries链接静态库hello_library

0x02 示例

下面是一个简单的demo,使用 CMake 构建一个共享/动态库:

本教程中的文件如下:

ln28@DESKTOP-FS9U3GT:/mnt/d/Project/Cmake_examples/cmake_basics_04$ tree
.
├── CMakeLists.txt
├── build
├── include
│   └── shared
│       └── Hello.h
└── src
    ├── Hello.cpp
    └── main.cpp
 
4 directories, 4 files

[CMakeLists.txt] - 包含要运行的 CMake 命令

# 指定CMake的最低版本要求。
cmake_minimum_required(VERSION 3.1)
 
# 使用project命令指定库的名称
project(hello_library)
 
# 使用add_library命令添加库的源代码文件。指定库的类型为SHARED
add_library(hello_library SHARED src/Hello.cpp)
 
# 添加别名,允许你在将目标链接到其他目标时使用别名引用该目标
add_library(hello::library ALIAS hello_library)
 
 
# 添加头文件目录
target_include_directories(hello_library PUBLIC ${PROJECT_SOURCE_DIR}/include)
 
 
# 使用add_executable添加可执行文件代码
add_executable(hello_binary src/main.cpp)
 
# 使用target_link_libraries链接静态库hello_library
target_link_libraries(hello_binary PRIVATE hello::library)

[include/shared/Hello.h] - 要包含的头文件

#ifndef __HELLO_H__
 
#define __HELLO_H__
 
 
class Hello
{
 
public:
 
void print();
 
};
 
#endif

[src/Hello.cpp] - 要编译的源文件

#include <iostream>
 
#include "shared/Hello.h"
 
void Hello::print()
{
 
    std::cout << "Hello Shared Library!" << std::endl;
 
}
 
 [src/main.cpp] - 具有 main 的源文件 
#include "shared/Hello.h"
 
int main(int argc, char *argv[])
 
{
 
    Hello hi;
 
    hi.print();
 
    return 0;
 
}

使用cmake .. && make -j24进行编译生成出 hello_binary 和 libhello_library.so, 你也可以参考

ln28@DESKTOP-FS9U3GT:/mnt/d/Project/Cmake_examples/cmake_basics_04/build$ cmake .. && make -j24
-- Configuring done
-- Generating done
-- Build files have been written to: /mnt/d/Project/Cmake_examples/cmake_basics_04/build
Scanning dependencies of target hello_library
[ 25%] Building CXX object CMakeFiles/hello_library.dir/src/Hello.cpp.o
[ 50%] Linking CXX shared library libhello_library.so
[ 50%] Built target hello_library
Scanning dependencies of target hello_binary
[ 75%] Building CXX object CMakeFiles/hello_binary.dir/src/main.cpp.o
[100%] Linking CXX executable hello_binary
[100%] Built target hello_binary
ln28@DESKTOP-FS9U3GT:/mnt/d/Project/Cmake_examples/cmake_basics_04/build$ ls
CMakeCache.txt  CMakeFiles  Makefile  cmake_install.cmake  hello_binary  libhello_library.so
ln28@DESKTOP-FS9U3GT:/mnt/d/Project/Cmake_examples/cmake_basics_04/build$ ./hello_binary
Hello Shared Library!


相关文章
|
1月前
|
自然语言处理
CMake基础(3)静态库
CMake基础(3)静态库
44 1
|
1月前
|
存储 自然语言处理 Linux
CMake基础(1)初识CMake
CMake基础(1)初识CMake
29 0
|
1月前
|
编译器 C语言 C++
CMake基础(9)使用Clang编译
CMake基础(9)使用Clang编译
117 0
|
1月前
|
编译器 Linux 开发者
【cmake 交叉编译配置设置】CMAKE_TOOLCHAIN_FILE:跨平台编译的秘密武器
【cmake 交叉编译配置设置】CMAKE_TOOLCHAIN_FILE:跨平台编译的秘密武器
100 0
|
6月前
|
并行计算 编译器 Linux
|
7月前
|
存储 Cloud Native Linux
CMake学习之静态库动态库
CMake学习之静态库动态库
|
编译器 Linux C语言
MinGW编译动态库
MinGW编译动态库
448 0
|
Linux C++ Windows
MSVC编译动态库
MSVC编译动态库
177 0
|
编译器 Linux vr&ar
MinGW编译静态库
MinGW编译静态库
331 0
|
XML 并行计算 Linux
MSVC编译静态库
MSVC编译静态库
286 0