cmake多个目录文件生成一个动态库
时间: 2024-11-27 07:17:05 浏览: 13
cmake-cmake使用示例之生成动态库.zip
在CMake中,如果你想要从多个目录下生成一个动态链接库(`.so`, `.dll`, 或者 `.dylib`),你需要做以下几个步骤:
1. **添加目标**:
在CMakeLists.txt文件中,首先为每个包含源文件的目录创建一个目标(target)。例如,假设有两个目录,分别是"src/subdir1" 和 "src/subdir2",你可以这样做:
```cmake
add_library(MyDynamicLibrary src/subdir1/main.cpp src/subdir2/file2.cpp)
```
2. **设置搜索路径**:
如果源文件分布在不同的子目录,使用`include_directories()`命令来告诉CMake在哪里查找源文件:
```cmake
include_directories(src/subdir1)
include_directories(src/subdir2)
```
或者更简洁的方式是将所有子目录包含在一起:
```cmake
set(SOURCE_DIRS src/subdir1 src/subdir2)
foreach(DIR ${SOURCE_DIRS})
include_directories(${DIR})
endforeach()
```
3. **合并目录**:
CMake本身不会自动合并多个目录,但你可以手动指定目录的相对路径,使其看起来像是来自一个单一的目录:
```cmake
source_group("SourceFiles" FILES
src/subdir1/main.cpp
src/subdir2/file2.cpp
)
```
4. **配置链接**:
使用`link_directories()`指定库输出的目标文件将放置的目录,使用`target_link_libraries()`添加依赖项,如果其他库也在不同目录:
```cmake
link_directories(${CMAKE_CURRENT_BINARY_DIR}/bin) # 假设你有一个名为bin的目录用于存放库
target_link_libraries(MyDynamicLibrary libraryA libB) # 添加其他静态或动态库
```
5. **生成库**:
最后,通过调用`add_library()`命令生成库,然后运行`install()`指令将库复制到安装目录:
```cmake
install(TARGETS MyDynamicLibrary DESTINATION lib)
```
阅读全文