系统化学习cmake_4_shared-library

介绍

显示了一个helloworld示例,该示例首先创建并链接了一个共享库。
也展示了怎样为目标创建别名。
本教程中的文件包括:

$ tree
.
├── CMakeLists.txt
├── include
│   └── shared
│       └── Hello.h
└── src
    ├── Hello.cpp
    └── main.cpp
  • CMakeLists.txt - 包含要运行的CMake命令
  • include/shared/Hello.h - 头文件
  • src/Hello.cpp - 资源文件
  • src/main.cpp - main文件

概念

添加一个共享库

与前面关于静态库的示例一样,add_library( )函数也用于从某些源文件创建共享库。调用方法如下:

add_library(hello_library SHARED
    src/Hello.cpp
)

用add_library( )函数创建一个共享库,名字为libhello_library.so

别名

顾名思义,别名目标是一个目标的替代名称,在只读上下文中可以使用它来代替真正的目标名称。

add_library(hello::library ALIAS hello_library)

如下所示,这允许您在将目标链接到其他目标时使用别名引用目标。

链接共享库

链接共享库与链接静态库相同。创建可执行文件时,请使用target_link_library( )函数指向库 。

add_executable(hello_binary
    src/main.cpp
)

target_link_libraries(hello_binary
    PRIVATE
        hello::library
)

告诉cmake去链接 hello_library 在生成 hello_binary 可执行文件时。

/usr/bin/c++ CMakeFiles/hello_binary.dir/src/main.cpp.o -o hello_binary -rdynamic libhello_library.so -Wl,-rpath,/home/matrim/workspace/cmake-examples/01-basic/D-shared-library/build

构建例子

$ mkdir build

$ cd build

$ cmake ..
-- The C compiler identification is GNU 4.8.4
-- The CXX compiler identification is GNU 4.8.4
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/matrim/workspace/cmake-examples/01-basic/D-shared-library/build

$ make
Scanning dependencies of target hello_library
[ 50%] Building CXX object CMakeFiles/hello_library.dir/src/Hello.cpp.o
Linking CXX shared library libhello_library.so
[ 50%] Built target hello_library
Scanning dependencies of target hello_binary
[100%] Building CXX object CMakeFiles/hello_binary.dir/src/main.cpp.o
Linking CXX executable hello_binary
[100%] Built target hello_binary

$ ls
CMakeCache.txt  CMakeFiles  cmake_install.cmake  hello_binary  libhello_library.so  Makefile

$ ./hello_binary
Hello Shared Library!
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。