cmake 生成动态库 通过link_directories
时间: 2023-12-10 16:42:09 浏览: 47
link_directories是CMake中一个用于指定链接库路径的命令。它用于告诉CMake在编译时查找库文件的位置。如果我们要生成一个动态库并使用link_directories链接其依赖库,需要按照以下步骤进行:
1. 在CMakeLists.txt文件中使用add_library命令生成动态库,如下所示:
```
add_library(mylib SHARED mylib.cpp)
```
其中,SHARED关键字表示生成动态库。
2. 在CMakeLists.txt文件中使用target_link_libraries命令链接依赖库,并使用link_directories指定依赖库的路径,如下所示:
```
link_directories(/path/to/dependency/lib)
target_link_libraries(mylib dependency)
```
其中,/path/to/dependency/lib为依赖库的路径,dependency为依赖库的名称。
3. 使用cmake命令生成Makefile,然后使用make命令编译动态库。
当我们使用link_directories指定依赖库路径时,CMake会在编译时自动查找该路径下的库文件,并链接到生成的动态库中。
相关问题
cmake 生成动态库
要生成动态库,你需要使用CMake的add_library命令,并将其与SHARED关键字一起使用以指示生成动态库。以下是一个简单的例子:
```
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (MyLibrary)
# 添加头文件路径
include_directories(include)
# 添加动态库路径
link_directories(lib)
# 生成动态库
add_library(MyLibrary SHARED src/MyLibrary.cpp)
```
在这个例子中,我们定义了一个名为MyLibrary的项目,并将src/MyLibrary.cpp文件编译成一个名为MyLibrary的动态库。使用SHARED关键字告诉CMake生成动态库而不是静态库。
一旦你运行了CMake,它将生成一个Makefile或其他构建系统文件,使你能够构建并链接到你的动态库。
cmake 使用动态库
CMake 是一个跨平台的构建工具,可以用于管理和构建 C++ 项目。要使用动态库,你需要先定义动态库的构建规则,并将其链接到你的项目中。
以下是一个使用 CMake 构建项目并链接动态库的示例:
首先,在项目根目录下创建一个 `CMakeLists.txt` 文件。
```cmake
cmake_minimum_required(VERSION 3.12)
project(MyProject)
# 添加动态库的路径,比如在当前目录下有一个名为 mylib 的动态库
link_directories(${CMAKE_CURRENT_SOURCE_DIR})
# 添加可执行文件
add_executable(myapp main.cpp)
# 链接动态库到可执行文件
target_link_libraries(myapp mylib)
```
然后,在项目根目录下创建 `main.cpp` 文件作为入口文件。
```cpp
#include <iostream>
// 引入动态库中的函数或类
extern "C" {
#include "mylib.h"
}
int main() {
// 调用动态库中的函数或类
mylib_func();
return 0;
}
```
最后,在项目根目录下执行以下命令进行构建:
```shell
mkdir build
cd build
cmake ..
make
```
这样就会生成一个名为 `myapp` 的可执行文件,它会链接到你所指定的动态库,并在运行时调用其中的函数或类。
请将上述示例中的 `mylib` 替换为你实际使用的动态库名称,确保该动态库与你的项目在同一目录下,或者在 `link_directories` 中指定动态库的路径。
希望这个示例能帮助你使用 CMake 构建项目并链接动态库。如果你有更多相关的问题,请随时提问。
相关推荐
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)