一、CMake简介
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为CMakeLists.txt。
Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再以一般的建构方式使用。可以通过CMake官方网站获得更多关于cmake 的信息。
可以理解为,编写Makefile难度太大,CMake基于Makefile做了二次开发。
1.1、cmake 的特点
1 开放源代码,使用类BSD 许可发布。
2 跨平台,并可生成native 编译配置文件,在Linux/Unix 平台,生成 makefile,在苹果平台,可以生成xcode,在 Windows 平台,可以生成 MSVC 的工程文件。
3 能够管理大型项目,KDE4 就是最好的证明。
4 简化编译构建过程和编译过程。Cmake 的工具链非常简单:cmake+make。
5 高效率,CMake 构建KDE4 的 kdelibs 要比使用autotools 来构建KDE3.5.6 的 kdelibs 快40%,主要是因为 Cmake 在工具链中没有libtool。
6 可扩展,可以为cmake 编写特定功能的模块,扩充cmake 功能。
1.2、注意
1 cmake 很简单,但绝对没有想象中那么简单,简单是相对Makefile而言的。
2 cmake 编写的过程实际上是编程的过程,跟使用autotools 一样,不过需要编写的是CMakeLists.txt(每个目录一个),使用的是cmake 语言和语法。
3 cmake 跟已有体系的配合并不是特别理想,比如pkgconfig。
1.3、使用建议
1 如果工程只有几个文件,直接编写Makefile 是最好的选择。
2 如果使用的是C/C++/Java 之外的语言,建议不要使用cmake。
3 如果使用的语言有非常完备的构建体系,比如java 的 ant,也不需要学习cmake。
4 如果项目已经采用了非常完备的工程管理工具,并且不存在维护问题,没有必要迁移到 cmake。
5 如果仅仅使用qt 编程,没有必要使用 cmake,因为qmake 管理 Qt 工程的专业性和自动化程度比cmake 要高很多。
二、安装 cmake
我当前的CMake版本:
$ cmake --version
cmake version 3.5.1
CMake suite maintained and supported by Kitware (kitware.com/cmake).
有些项目有最低版本要求,如果版本过低,可能项目会编译不了,可以升级CMake。
(1)卸载已经安装的旧版的CMake[非必需]。
sudo apt-get autoremove cmake
(2)下载CMake压缩包。
wget https://cmake.org/files/v3.21/cmake-3.21.3-linux-x86_64.tar.gz
(3)解压压缩包。
tar zxvf cmake-3.21.3-linux-x86_64.tar.gz
查看解压后目录:
cmake-3.21.3-linux-x86_64
├── bin
│ ├── ccmake
│ ├── cmake
│ ├── cmake-gui
│ ├── cpack
│ └── ctest
├── doc
│ └── cmake
├── man
│ ├── man1
│ └── man7
└── share
├── aclocal
├── applications
├── bash-completion
├── cmake-3.21
├── emacs
├── icons
├── mime
└── vim
15 directories, 5 files
bin下面有各种cmake家族的产品程序。
(4)创建软链接。
注意,文件路径是可以指定的, 一般选择在/opt 或 /usr 路径下, 这里选择/opt 。
sudo mv cmake-3.21.3-Linux-x86_64 /opt/cmake-3.21.3
sudo ln -sf /opt/cmake-3.21.3/bin/* /usr/bin/
检查版本号:
$ cmake --version
cmake version 3.21.3
CMake suite maintained and supported by Kitware (kitware.com/cmake).
三、CMake的简单使用
3.1、准备工作
(1)首先,建立一个文件夹,用来存放工程文件。
cd cmake
mkdir t1
cd t1
(2)在 t1 目录建立main.c 和 CMakeLists.txt(注意文件名大小写):
main.c 文件内容:
//main.c
#include <stdio.h>
int main()
{
printf(“Hello World from t1 Main!\n”);
return 0;
}
CMakeLists.txt 文件内容:
PROJECT(HELLO)
SET(SRC_LIST main.c)
MESSAGE(STATUS "This is BINARY dir " ${HELLO_BINARY_DIR})
MESSAGE(STATUS "This is SOURCE dir "${HELLO_SOURCE_DIR})
ADD_EXECUTABLE(hello ${SRC_LIST})
ADD_EXECUTABLE(hello2 ${SRC_LIST})
关于CMakeLists.txt 文件内容的语法,后面会做详细说明。

最低0.47元/天 解锁文章
2465

被折叠的 条评论
为什么被折叠?



