如何在 CMake 中区分静态链接和动态链接?
时间: 2024-10-25 09:06:14 浏览: 17
动态与静态之舞:CMake中链接库的艺术
在 CMake 中,区分静态链接(Static Linking)和动态链接(Dynamic Linking)通常通过设置构建目标的类型来完成:
1. 静态链接(STATIC):
当你使用 `add_library` 添加库并设置为 `STATIC` 类型时,CMake 会在生成的目标文件中包含所有依赖项的源代码,最终得到的是一个静态库(如 `.a`(Unix/Linux)或 `.lib`(Windows))。使用该库时,你需要将这个静态库链接到你的应用程序,而不需要运行时搜索路径(比如 `$LD_LIBRARY_PATH`)。
2. 动态链接(SHARED):
而设置为 `SHARED`(或 `MODULE`,这是CMake 3.0及更高版本中的等效名)时,CMake 会生成一个共享库(如 `.so`(Unix/Linux)、`.dll`(Windows)或 `.dylib`(macOS))。当你构建其他程序时,只需要链接库的名称即可,运行时操作系统会自动查找并在需要时加载它。
使用 `target_link_libraries` 命令来指定链接哪些库,你可以明确指定是静态还是动态链接,例如:
```cmake
add_executable(myapp main.cpp)
# 静态链接
target_link_libraries(myapp libmylib STATIC)
# 动态链接
target_link_libraries(myapp libmylib SHARED)
```
阅读全文