返回
CMake学习笔记之编译方式改造实践
后端
2023-09-14 12:43:55
前言
很高兴再次拿起笔来写作,距离上次写东西已经快半年了。这期间,除了工作比较忙外,也开始参与一些开源项目,比如Pika。刚好今年Pika做了一些改动,比如编译方式从MakeFile改成了CMake。之前一直使用MakeFile来编译项目,对CMake并不是很熟悉,所以趁此机会学习一下CMake,并把学习过程中的心得体会分享给大家。
CMake简介
CMake是一个跨平台的构建系统,它可以生成各种平台的编译文件,比如Makefile、Visual Studio项目文件等。CMake使用一种名为CMake语言的脚本语言来编写构建脚本,CMake语言是一种非常简单的语言,学习起来并不难。
CMake学习实践
1. 安装CMake
CMake可以在CMake官网下载到,安装过程非常简单,这里就不赘述了。
2. 创建CMake项目
创建一个CMake项目只需要创建一个CMakeLists.txt文件,这个文件是CMake项目的配置文件,里面包含了项目的名称、版本号、依赖库等信息。下面是一个简单的CMakeLists.txt文件示例:
cmake_minimum_required(VERSION 3.10)
project(Pika)
set(CMAKE_CXX_STANDARD 11)
find_package(Boost REQUIRED)
add_executable(pika main.cpp)
target_link_libraries(pika Boost::system)
3. 编译CMake项目
要编译CMake项目,只需要运行以下命令:
cmake .
make
如果一切顺利,就会生成可执行文件。
在Pika项目中使用CMake
Pika项目是一个分布式键值存储系统,它原本使用MakeFile来编译,后来改成了CMake。在Pika项目中,CMakeLists.txt文件位于项目根目录下,它的内容如下:
cmake_minimum_required(VERSION 3.10)
project(Pika)
set(CMAKE_CXX_STANDARD 11)
find_package(Boost REQUIRED)
find_package(Gflags REQUIRED)
find_package(Protobuf REQUIRED)
add_executable(pika main.cpp)
target_link_libraries(pika Boost::system Boost::thread Gflags::gflags Protobuf::libprotobuf)
这个CMakeLists.txt文件与前面给出的示例非常相似,只是多了几个find_package()命令,这些命令用于查找依赖库。
在改造过程中遇到的问题
在改造过程中,也遇到了一些问题,比如:
- CMake版本问题:Pika项目原本使用的是CMake 3.5版本,但现在已经升级到了CMake 3.10版本,所以在升级CMake版本后,需要对CMakeLists.txt文件进行一些修改。
- 依赖库问题:Pika项目依赖了Boost、Gflags和Protobuf等库,在使用CMake编译时,需要先找到这些库,然后才能编译Pika项目。
- 编译选项问题:在使用CMake编译Pika项目时,需要指定一些编译选项,比如编译标准、优化选项等。
总结
通过这次实践,我对CMake有了更深的了解,也对Pika项目的编译方式有了更清晰的认识。CMake是一个非常强大的构建系统,它可以帮助我们轻松地编译各种平台的项目。