cmake 静态编译
时间: 2024-03-01 18:47:24 浏览: 43
CMake是一个跨平台的开源构建工具,它用于自动生成各种不同编译系统的构建文件(如Makefile、Visual Studio项目文件等),从而实现跨平台的代码构建。静态编译是指将程序所需的所有依赖库都打包到可执行文件中,使得可执行文件在其他机器上运行时不再依赖外部的动态链接库。
在CMake中进行静态编译,需要进行以下几个步骤:
1. 在CMakeLists.txt文件中指定编译选项和链接选项,以及需要静态编译的库。可以使用`add_executable`命令指定生成可执行文件的源文件,使用`target_link_libraries`命令指定需要链接的库。
2. 使用CMake生成构建文件。可以通过命令行执行`cmake`命令,或者使用CMake GUI工具来生成构建文件。
3. 使用生成的构建文件进行编译。可以通过命令行执行构建工具(如make、ninja等)来进行编译。
4. 编译完成后,生成的可执行文件就是静态编译的结果,可以在其他机器上独立运行,不再依赖外部的动态链接库。
需要注意的是,进行静态编译可能会导致可执行文件的体积增大,并且可能会增加编译时间。此外,某些库可能不支持静态编译,需要查看库的文档或者官方支持情况。
相关问题
cmake静态编译可执行文件demo
CMake是一个跨平台的构建系统。它可以自动生成Makefile或是Visual Studio的项目文件,以达到构建目标的效果。
静态编译指所有用到的第三方库都会被链接到最终的二进制文件中,因此这种方式生成的可执行文件可以在不同的机器上运行,而不必考虑库文件的路径和版本等问题。
下面是一个简单的CMakeLists.txt文件,用于生成一个静态编译的可执行文件。
```cmake
cmake_minimum_required(VERSION 3.5)
project(demo)
set(CMAKE_CXX_COMPILER "g++")
set(CMAKE_CXX_STANDARD 11)
set(SOURCES main.cpp)
set(LIBRARIES lib1 lib2)
include_directories(include)
add_executable(demo ${SOURCES})
target_link_libraries(demo ${LIBRARIES})
```
在这个例子中,我们定义了一个项目名称为demo,设置了编译器为g++,使用C++11标准进行编译。我们还定义了源码文件名为main.cpp,库文件名为lib1和lib2。在CMakeLists.txt中,我们通过add_executable命令将源码文件编译成可执行文件,并通过target_link_libraries命令将库文件链接到可执行文件中。
在项目目录下执行以下指令:
```bash
mkdir build && cd build
cmake ..
make
```
即可在build目录下生成可执行文件demo。我们可以使用ldd命令查看可执行文件的依赖关系,发现所有依赖库都已经被链接到了二进制文件中。
```bash
ldd demo
```
需要注意的是,静态编译的可执行文件可能会比较大,因为它包含了所有的依赖库,因此需要权衡可执行文件的大小和可移植性。
cmake 编译静态库
在使用CMake编译静态库时,可以使用add_library函数来定义库的名称和源文件。在add_library函数中,可以通过第二个参数来指定库的类型,使用STATIC表示静态库。例如,使用add_library(xlog STATIC xlog.cpp)可以编译一个名为xlog的静态库。\[2\]然后,使用CMake的外部构建方法,可以在build/lib目录中生成静态库libadd.a。首先创建一个build目录,然后进入该目录,运行cmake命令来生成构建文件,最后使用make命令进行编译。具体的命令如下所示:
$ mkdir build
$ cd build
$ cmake ..
$ make\[3\]
#### 引用[.reference_title]
- *1* [CMake构建静态库与动态库以及使用](https://blog.csdn.net/Long_xu/article/details/129139244)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [cmake add_library编译链接静态库cmakelists](https://blog.csdn.net/jiedichina/article/details/126687785)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [CMake 学习四:CMake 构建静态库和动态库](https://blog.csdn.net/myw31415926/article/details/128508447)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]