Linux编译安装cmake
# cmake官网
https://cmake.org/
# cmake各个版本源码仓库
https://cmake.org/files/
# 下载
wget https://cmake.org/files/v3.21/cmake-3.21.1.tar.gz
# 解压
tar xvf cmake-3.21.1.tar.gz && cd cmake-3.21.1/
# 引导安装程序帮助
./bootstrap --help
# 创建安装目录
mkdir build
# 配置安装到指定目录(默认安装到/usr/local目录下),会生成安装到指定目录下的 Makefile 文件
# 一般就默认安装就行了,不用特别安装到其它目录,默认安装到 /usr/local 可以不用配置环境变量
./bootstrap --prefix=/root/cmake/cmake-3.21.1/build
# 根据 Makefile 中的配置编译&&安装cmake
make && make install
编译源码时常用的编译选项
# 最后的 “..” 表示cmkae命令执行时查找CMakeLists.txt文件的相对路径,用于生成MakeFile
cmake -DCMAKE_PREFIX_PATH=额外的库搜索目录1;额外的库搜索目录2 -DCMAKE_INSTALL_PREFIX=安装目录 ..
# 执行 cmake 命令后会生成 cmake_install.cmake install_manifest.txt Makefile 等文件,这些文件中描述了 make 编译安装源码后的头文件与库文件的安装目录
make -j8 && make install
CMake组织编译文件
CMake处理文件之间的关系,是跨平台编译工具,主要编写 CMakeLists.txt 文件,用 cmake 命令将 CMakeLists.txt 文件转化为 make 所需要的Makefiles 文件,然后调用g++来编译程序。
CMakefiles.txt 和用来生成 Makefiles 的文件是一致的,用 make 命令编译源码生成可执行程序或共享库。
gcc 一次编译一个源代码文件
make 一次编译多个源代码文件
cmake 根据 CmakeLists.txt文件生成的makefile
make调用makefile文件中的指令进行编译和链接
CMake编译安装的一般流程
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
-D相当于是宏定义, 实际上是给编译器 gcc 传入参数,可以理解为告诉CMake后续要定义一些参数,每定义一个参数就在前边加上"-D"。
CMAKE_BUILD_TYPE 往往是在CMakeList.txt中定义的,代表要编译的类型,如果你要对编译的程序进行调试,就需要设置CMAKE_BUILD_TYP=debug;如果你要对编译的程序只是运行追求性能,要设置CMAKE_BUILD_TYP=release。
CMAKE_INSTALL_PREFIX是指定编译好的程序安装的路径,如果不指定的就是默认的安装路径,指定可以安装在任意位置,一般软件多版本切换的时候会用到。
CMAKE_PREFIX_PATH是要编译的文件所在的安装路径。
".." 表示上层目录,意思是CMakeList.txt文件在编译路径的上一层。
根据CMakeLists.txt文件找到make以及make install所依赖的文件生成Makefile文件。
make:从当前目录中的 Makefile 中读取指令,然后编译源码生成静态库、动态库、可执行程序等。
sudo make install:从Makefile中读取指令,将编译好的可执行程序以及文档复制安装到指定的位置。