前言
@bandaoyu,本文随时更新,本文链接:https://blog.csdn.net/bandaoyu/article/details/114739976
CMake是什么,为什么要用CMake:https://blog.csdn.net/bandaoyu/article/details/89031672
ceph cmake工程涉及到的其他知识:《【cmake】CMakeList添加库|添加头文件|添加路径|add_executable、add_library、target_link_libraries|添加编译选项|宏开关》:https://blog.csdn.net/bandaoyu/article/details/115165199
这里有篇很简单的cmake入门博客:
如何编写CMakeList.txt https://www.cnblogs.com/cv-pr/p/6206921.html
CMakeList的HelloWorld :https://www.cnblogs.com/zhoug2020/p/5904206.html
详尽的Makefile规则教程:https://blog.csdn.net/liang13664759/article/details/1771246
CMake Cookbook:https://www.bookstack.cn/read/CMake-Cookbook/content-preface-preface-chinese.md
Ceph cmake 工程
ceph的编译优化等级、运行时加载库的路径经过cmake生成文件后在link.txt中能看到。(记载库https://blog.csdn.net/bandaoyu/article/details/113181179)
cmake生成的目录
跨平台的编译管理工具。主要作用其实就是根据规则自动生成Makefile,然后使用make命令进行编译链接。
使用cmake需要如下步骤:
1. 编写CMakeList.txt文件
2. 生成Makefile,mkdir build && cd build && cmake ../CMakeList.txt。因为cmake生成的目录文件很多,一般情况下都会创建一个build目录进行放置。
3. 执行make 命令进行项目编译链接。
cmake生成的目录结果大致如下所示:
├── build
│ ├── CMakeCache.txt
│ ├── CMakeFiles
│ │ ├── 3.2.2
│ │ │ ├── CMakeCCompiler.cmake
│ │ │ ├── CMakeCXXCompiler.cmake
│ │ │ ├── CMakeDetermineCompilerABI_C.bin
│ │ │ ├── CMakeDetermineCompilerABI_CXX.bin
│ │ │ ├── CMakeSystem.cmake
│ │ │ ├── CompilerIdC
│ │ │ │ ├── a.out
│ │ │ │ └── CMakeCCompilerId.c
│ │ │ └── CompilerIdCXX
│ │ │ ├── a.out
│ │ │ └── CMakeCXXCompilerId.cpp
│ │ ├── cmake.check_cache
│ │ ├── CMakeDirectoryInformation.cmake
│ │ ├── CMakeOutput.log
│ │ ├── CMakeTmp
│ │ ├── feature_tests.bin
│ │ ├── feature_tests.c
│ │ ├── feature_tests.cxx
│ │ ├── Makefile2
│ │ ├── Makefile.cmake
│ │ ├── progress.marks
│ │ ├── TargetDirectories.txt
│ │ └── test_sqrt.dir
│ │ ├── build.make
│ │ ├── C.includecache
│ │ ├── cmake_clean.cmake
│ │ ├── DependInfo.cmake
│ │ ├── depend.internal
│ │ ├── depend.make
│ │ ├── flags.make│ │ ├── link.txt
│ │ ├── progress.make
│ │ └── src
│ │ ├── b.c.o
│ │ └── main.c.o
│ ├── cmake_install.cmake
│ ├── Makefile
│ └── test_sqrt
├── CMakeLists.txt
├── include
│ └── b.h
└── src
├── b.c
└── main.c
cmake工程添加新模块(CMakeLists.txt)
ceph CMakeList.txt的结构,如下所示。在工程根目录下有一个总的CMakeList.txt文件,然后使用add_subdirectory语句包含指定文件夹层层递进,从而找到所有的CMakeList的配置。因此,我们在更改ceph源码时,只需要修改该模块下的CMakeList.txt即可。
├── ceph-root
│ ├── build
│ │ ├── ...
│ ├── CMakeLists.txt
│ ├── src
│ │ ├── CMakeLists.txt
│ │ ├── tools
│ │ │ ├── CMakeLists.txt
│ │ ├── osd
│ │ │ ├── CMakeLists.txt
│ │ ├── mon
│ │ │ ├── CMakeLists.txt
│ │ │...
比如,我们想增加一个命令行工具,在 src/tools/ 目录下,新建了一个目录,嗯,叫demo