CMakeLists.txt生成静态库
时间: 2023-11-28 18:40:49 浏览: 103
要生成静态库,可以在 CMakeLists.txt 中使用 add_library 命令,并指定库的类型为 STATIC。例如:
```
add_library(mylib STATIC src1.cpp src2.cpp)
```
这将编译 src1.cpp 和 src2.cpp 并生成名为 libmylib.a 的静态库文件。
相关问题
如何编写编译静态库的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
```
这将在当前目录下生成静态库文件和相关的构建文件。
希望以上信息对你有所帮助!如果你有任何其他问题,请随时提问。
c++ cmake 多文件项目,多个cmakelists.txt示例
对于大型的 C++ 项目,可能需要将代码分为多个模块,并使用多个 CMakeLists.txt 文件来管理它们。下面是一个使用多个 CMakeLists.txt 文件来管理 C++ 多文件项目的示例:
假设我们有以下项目结构:
```
myproject/
├── CMakeLists.txt
├── module1/
│ ├── CMakeLists.txt
│ ├── include/
│ │ └── module1.h
│ └── src/
│ └── module1.cpp
└── module2/
├── CMakeLists.txt
├── include/
│ └── module2.h
└── src/
└── module2.cpp
```
其中,`myproject` 目录下的 `CMakeLists.txt` 文件是主 CMakeLists.txt 文件,它用于管理整个项目。`module1` 目录和 `module2` 目录是两个子模块,每个子模块都有自己的 `CMakeLists.txt` 文件、头文件和源文件。
现在,我们需要使用 CMake 来构建这个项目。我们可以在 `myproject` 目录下创建一个主 CMakeLists.txt 文件,并添加以下内容:
```cmake
cmake_minimum_required(VERSION 3.10)
project(myproject)
# 添加子目录
add_subdirectory(module1)
add_subdirectory(module2)
```
该 CMakeLists.txt 文件指定了项目的最低 CMake 版本和项目名称。`add_subdirectory` 命令用于添加子目录,它告诉 CMake 去处理 `module1` 和 `module2` 这两个子目录中的 CMakeLists.txt 文件。
接下来,我们需要在 `module1` 目录下创建一个名为 `CMakeLists.txt` 的文件,并添加以下内容:
```cmake
# 添加头文件搜索路径
include_directories(include)
# 添加源文件
add_library(module1 src/module1.cpp)
# 暴露头文件
target_include_directories(module1 PUBLIC include)
```
该 CMakeLists.txt 文件指定了 `module1` 子模块的构建规则。`include_directories` 命令添加了头文件搜索路径,它告诉 CMake 在 `include` 目录中查找头文件。`add_library` 命令编译 `module1.cpp` 源文件并生成一个静态库文件 `libmodule1.a`。最后,`target_include_directories` 命令将 `include` 目录暴露给其他模块,以便它们可以包含 `module1.h` 头文件。
然后,在 `module2` 目录下创建一个名为 `CMakeLists.txt` 的文件,并添加以下内容:
```cmake
# 添加头文件搜索路径
include_directories(include)
# 添加源文件
add_library(module2 src/module2.cpp)
# 暴露头文件
target_include_directories(module2 PUBLIC include)
```
该 CMakeLists.txt 文件指定了 `module2` 子模块的构建规则,与 `module1` 子模块类似。
完成以上步骤后,我们可以使用以下命令来构建项目:
```bash
mkdir build
cd build
cmake ..
make
```
`mkdir build` 创建了一个构建目录,`cd build` 进入该目录,`cmake ..` 命令使用上面的主 CMakeLists.txt 文件来构建项目,`make` 命令编译源代码并生成可执行文件。
这就是一个使用多个 CMakeLists.txt 文件来管理 C++ 多文件项目的示例。