CMakeLists.txt生成静态库
时间: 2023-11-28 17:40:49 浏览: 143
要生成静态库,可以在 CMakeLists.txt 中使用 add_library 命令,并指定库的类型为 STATIC。例如:
```
add_library(mylib STATIC src1.cpp src2.cpp)
```
这将编译 src1.cpp 和 src2.cpp 并生成名为 libmylib.a 的静态库文件。
相关问题
CMakeLists.txt 添加动态库
在CMake中添加动态库的基本步骤通常包括创建目标库、指定编译器选项、定义链接库的接口以及设置导出的符号等。以下是一个简单的例子来说明如何在CMakeLists.txt文件中添加一个动态库:
```cmake
# 设置项目名称和版本号
project(MyDynamicLib VERSION 1.0)
# 创建动态库
add_library(MyDynamicLib SHARED
src/lib.cpp
src/lib.h
)
# 设置动态库的导出符号,通常用于生成和安装导入库
set_target_properties(MyDynamicLib PROPERTIES
VERSION "1.0"
SOVERSION "1"
)
# 配置动态库的安装路径,例如将库安装到系统库目录
install(TARGETS MyDynamicLib
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
RUNTIME DESTINATION bin
INCLUDES DESTINATION include
)
```
上述代码段定义了一个名为`MyDynamicLib`的动态库项目,包含了源文件`lib.cpp`和头文件`lib.h`。`add_library`命令用于创建动态库,并指定了`SHARED`关键字表示库为动态链接库。`set_target_properties`命令用于设置目标属性,其中`VERSION`和`SOVERSION`用于控制库的版本信息。最后,`install`命令指定了安装规则,`LIBRARY`、`ARCHIVE`和`RUNTIME`分别对应动态库、静态库和可执行文件的安装目标。
如何编写编译静态库的CMakeLists.txt
要编写一个用于编译静态库的CMakeLists.txt文件,你可以按照以下步骤进行操作:
1. 首先,创建一个新的文件夹,用于存放你的C++源代码和CMakeLists.txt文件。
2. 在该文件夹中,创建一个CMakeLists.txt文件,并打开它。
3. 在CMakeLists.txt文件中,使用`cmake_minimum_required`命令指定所需的CMake最低版本。例如:
```
cmake_minimum_required(VERSION 3.10)
```
4. 使用`project`命令指定项目的名称和版本。例如:
```
project(MyLibrary VERSION 1.0)
```
5. 使用`add_library`命令来定义你的静态库。该命令的语法如下:
```
add_library(<library_name> <library_type> <source_files>)
```
其中,`<library_name>`是你的库的名称,`<library_type>`是库的类型(这里是STATIC,表示静态库),`<source_files>`是你的源代码文件列表。
例如,如果你的库名为`mylib`,源代码文件为`mylib.cpp`和`mylib.h`,则可以这样写:
```
add_library(mylib STATIC mylib.cpp mylib.h)
```
6. 如果你的库依赖于其他库,可以使用`target_link_libraries`命令来指定这些依赖关系。例如:
```
target_link_libraries(mylib PUBLIC otherlib)
```
这将使得`otherlib`库的头文件和链接库在使用`mylib`库时可见。
7. 最后,使用`install`命令来指定安装规则。例如:
```
install(TARGETS mylib DESTINATION lib)
install(FILES mylib.h DESTINATION include)
```
这将把编译好的静态库文件安装到`lib`目录下,将头文件安装到`include`目录下。
完成以上步骤后,你就可以使用CMake来生成你的静态库了。可以使用以下命令:
```
cmake .
make
```
这将在当前目录下生成静态库文件和相关的构建文件。
希望以上信息对你有所帮助!如果你有任何其他问题,请随时提问。
阅读全文