CMakeLists 引用.so动态库
时间: 2023-08-19 14:15:52 浏览: 146
在CMakeLists.txt中引入.so动态库,可以使用`find_library`命令查找动态库的路径,然后使用`target_link_libraries`命令将库链接到目标中。
以引用名为`libfoo.so`的动态库为例,假设动态库的路径为`/path/to/libfoo.so`,我们可以在CMakeLists.txt中添加以下内容:
```cmake
# 查找动态库的路径
find_library(LIBFOO_PATH libfoo.so /path/to)
# 添加可执行文件
add_executable(myapp main.cpp)
# 链接动态库
target_link_libraries(myapp ${LIBFOO_PATH})
```
在这个例子中,`find_library`命令会在`/path/to`目录中查找名为`libfoo.so`的动态库,并将其路径存储在`LIBFOO_PATH`变量中。然后我们使用`target_link_libraries`命令将该动态库链接到`myapp`目标中。
需要注意的是,Linux系统下动态库的命名规则是`lib<name>.so`,因此在使用`find_library`命令查找动态库时,需要将`lib`前缀和`.so`后缀省略。如果动态库的名字不符合这个规则,需要在`find_library`命令中指定完整的动态库名。
相关问题
CMakeLists.txt生成.so动态库
在 CMake 中生成动态库(.so)的步骤如下:
1. 在 CMakeLists.txt 文件中,使用 `add_library()` 函数来创建一个库目标。
```cmake
add_library(mylib SHARED mylib.cpp)
```
其中,`mylib` 是库的名称,`SHARED` 表示生成动态库。
2. 如果需要引用其他库,需要使用 `target_link_libraries()` 函数将这些库链接到当前库中。
```cmake
target_link_libraries(mylib lib1 lib2)
```
其中,`lib1` 和 `lib2` 是需要链接的库的名称。
3. 如果库中需要使用头文件,需要使用 `target_include_directories()` 函数将头文件目录添加到头文件搜索路径中。
```cmake
target_include_directories(mylib PUBLIC include)
```
其中,`include` 是头文件所在的目录。
4. 如果需要设置库的输出路径,可以使用 `set_target_properties()` 函数。
```cmake
set_target_properties(mylib PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib)
```
其中,`LIBRARY_OUTPUT_DIRECTORY` 表示库的输出路径,`${CMAKE_CURRENT_SOURCE_DIR}/lib` 表示当前 CMakeLists.txt 所在的目录下的 `lib` 子目录。
最终的 CMakeLists.txt 文件示例:
```cmake
cmake_minimum_required(VERSION 3.10)
project(mylib)
# 创建库目标
add_library(mylib SHARED mylib.cpp)
# 链接其他库
target_link_libraries(mylib PRIVATE lib1 lib2)
# 添加头文件搜索路径
target_include_directories(mylib PUBLIC include)
# 设置输出路径
set_target_properties(mylib PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib)
```
在运行 `cmake` 和 `make` 命令后,就可以在上述设置的输出路径中找到生成的动态库了。
CMakeLists引用libjpeg动态库
在CMakeLists.txt中引用libjpeg动态库,可以使用以下命令:
```
find_package(JPEG REQUIRED)
include_directories(${JPEG_INCLUDE_DIR})
target_link_libraries(your_target_name ${JPEG_LIBRARIES})
```
其中,`JPEG`是CMake中查找libjpeg库的模块名,在CMake 2.8.8及以上版本中提供了该模块。`JPEG_INCLUDE_DIR`和`JPEG_LIBRARIES`是由该模块提供的变量,用于指定libjpeg库的头文件路径和库文件路径。`your_target_name`是你要编译的目标名。
如果你已经知道了libjpeg库的头文件路径和库文件路径,可以使用以下命令:
```
include_directories(path/to/jpeg/include)
target_link_libraries(your_target_name path/to/libjpeg.so)
```
其中,`path/to/jpeg/include`是libjpeg库的头文件路径,`path/to/libjpeg.so`是libjpeg库的动态库文件路径。请根据实际情况修改为你所使用的路径。
阅读全文