cmake 静态库 动态库的区别
时间: 2023-12-19 19:30:09 浏览: 192
CMake是一个跨平台的自动化构建系统,可以用简单的语句来描述所有平台的编译过程。CMake能够输出各种各样的编译器文件,如Makefile或Visual Studio的解决方案文件等。CMake支持静态库和动态库的构建。
静态库和动态库的区别在于链接方式和加载方式不同。静态库在编译时被链接到目标代码中,程序运行时不需要再加载该库,因此静态库的可移植性较差,且占用空间较大。而动态库在程序运行时才被加载,因此动态库的可移植性较好,且占用空间较小。
在CMake中,可以使用ADD_LIBRARY命令来创建静态库和动态库。其中,静态库使用关键字STATIC,动态库使用关键字SHARED。例如:
```cmake
# 创建静态库
ADD_LIBRARY(hello_static STATIC ${LIBHELLO_SRC})
# 创建动态库
ADD_LIBRARY(hello_shared SHARED ${LIBHELLO_SRC})
```
相关问题
cmake静态库连接动态库 darwin系统
在macOS系统中,使用CMake连接静态库和动态库的方式与其他操作系统大致相同。以下是连接静态库和动态库的步骤:
1. 编写CMakeLists.txt文件,声明需要连接的静态库和动态库,并指定头文件和库文件的路径。
2. 使用add_executable命令编译源代码生成可执行文件,并将需要连接的库文件添加到可执行文件中。
3. 使用target_link_libraries命令将需要连接的静态库和动态库链接到可执行文件中。
下面是一个示例的CMakeLists.txt文件,用于连接静态库和动态库:
```
cmake_minimum_required(VERSION 3.10)
project(MyProject)
# 指定头文件路径
include_directories(include)
# 指定静态库路径
link_directories(lib)
# 编译源代码生成可执行文件
add_executable(MyExecutable main.cpp)
# 将需要连接的静态库和动态库添加到可执行文件中
target_link_libraries(MyExecutable libMyStaticLibrary.a libMyDynamicLibrary.dylib)
```
在上面的示例中,我们假设需要连接一个名为libMyStaticLibrary.a的静态库和一个名为libMyDynamicLibrary.dylib的动态库。我们还假设这些库文件位于项目根目录下的lib目录中。
cmake静态库编译到动态库中
你可以使用CMake将静态库编译为动态库,以下是一个简单的示例:
首先,在你的CMakeLists.txt文件中,将你的项目设置为生成共享库(动态库):
```
cmake_minimum_required(VERSION 3.0)
project(myproject)
# 设置生成动态库
add_library(mylib SHARED mylib.cpp)
```
然后,使用cmake命令生成并构建你的项目:
```
cmake .
make
```
这将生成一个动态库文件,例如libmylib.so(在Linux)或libmylib.dylib(在Mac)。
请注意,静态库和动态库是不同的,所以你需要确保你的代码能够在动态库中正确运行。如果你的静态库有其他依赖,你可能还需要调整CMake文件来包含这些依赖。
希望这对你有所帮助!如果你还有其他问题,请随时提问。
阅读全文