linux cmake 怎么添加动态库
时间: 2023-07-11 19:51:42 浏览: 351
要在CMake中添加动态库,可以使用以下命令:
```
add_library(my_lib SHARED path/to/my_lib.cpp)
```
其中,my_lib是动态库的名称,path/to/my_lib.cpp是动态库的源文件路径。
如果动态库已经编译好了,可以使用以下命令添加:
```
target_link_libraries(my_target /path/to/my_lib.so)
```
其中,my_target是需要链接动态库的目标文件名,/path/to/my_lib.so是动态库的路径。注意,动态库的文件扩展名通常为.so。
相关问题
cmake 生成动态库
要使用 CMake 生成动态库,可以按照以下步骤操作:
1. 在 CMakeLists.txt 文件中添加以下代码,其中 mylib 是动态库的名称,lib_source_files 是库的源文件列表:
```
add_library(mylib SHARED lib_source_files)
```
2. 如果需要指定动态库的输出路径,可以使用 SET 命令指定:
```
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
```
3. 如果需要指定动态库的版本号,可以使用 VERSION 和 SOVERSION 属性:
```
set_target_properties(mylib PROPERTIES VERSION 1.2.3 SOVERSION 1)
```
4. 生成动态库时,可以使用 make 命令或者 cmake --build 命令。如果使用 make 命令,可以执行以下命令:
```
make
make install
```
5. 完成后,动态库就生成了,并且可以在安装目录下找到它。
注意:在 Windows 平台上,动态库的扩展名是 .dll,而在 Linux 平台上,动态库的扩展名是 .so。
cmake 指定动态库输出路径
在CMake中,可以通过`CMAKE_LIBRARY_OUTPUT_DIRECTORY`命令来指定动态库(共享库)的输出路径。具体步骤如下:
1. 在CMakeLists.txt文件中,使用`set`命令来设置`CMAKE_LIBRARY_OUTPUT_DIRECTORY`变量,指定动态库输出路径。例如,假设我们希望将动态库输出到build目录下的lib文件夹中,可以在CMakeLists.txt中添加如下代码:
```cmake
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib)
```
2. 然后,编译项目时,CMake会根据设置的输出路径和目标类型自动生成动态库,并将其存储在指定的输出路径下。通过以下命令进行编译:
```shell
mkdir build
cd build
cmake ..
make
```
在编译完成后,动态库将会生成在指定的输出路径下的lib文件夹内。
如果希望在多个平台上设置不同的输出路径,可以根据平台类型来进行条件判断,例如:
```cmake
if(WIN32)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib/win32)
elseif(APPLE)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib/macos)
elseif(UNIX)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib/linux)
endif()
```
这样,根据不同平台的设置,生成的动态库将会分别输出到相应的路径下。
总之,通过在CMakeLists.txt文件中设置`CMAKE_LIBRARY_OUTPUT_DIRECTORY`变量,我们可以很方便地指定动态库的输出路径,使得生成的动态库能够按照我们的需求存储在指定的位置上。
相关推荐
![gz](https://img-home.csdnimg.cn/images/20210720083447.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.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)