您的位置:首页 > 其它

CMake 学习笔记 01 - CMake 简介

2017-01-20 16:45 447 查看

CMake 学习笔记 01 - CMake 简介

源代码见 https://github.com/fengyc/cmake-tutorial

CMake 是一个跨平台的 makefile 工具,帮助开发者组织 c/c++ 项目。它是比 make 更加高级的工具,能生成不同平台上的 makefile ,如 windows 上的 vcproj 和 mac 上是 xcode 项目。同时,还支持定义安装 install 、测试 ctest 、打包 package 、生成 dashboard 等高级功能。

CMake 使用 CMakeLists.txt 文件定义编译配置,同时能嵌套子目录,子目录中可以有自己的 CMakeLists.txt 。分目录中包含了子目录后,CMake 就能运行子目录中定义的编译配置。

CMake 的官方网站是 http://cmake.org ,由于 KDE 的开发过程中使用 CMake 构建而被大家逐步接受。

CMake 比较简单,但还是需要学习一下一些简单的语法。

这一系列的学习笔记是根据 cmake practice 的学习内容整理的。

CMake 安装

在主要的 linux 发行版中,都可以直接安装 CMake,同时可安装 CMake 相关的配置工具,包括 cmake-curses-gui (提供 ccmake 命令), cmake-qt-gui (提供 cmake-gui 命令)。

在 ubuntu 中,直接安装 CMake ::

sudo apt-get install cmake cmake-curses-gui cmake-qt-gui

CMake helloworld

现在来创建一个使用 CMake 进行构建的项目。

建立目录 helloworld ,并创建一个 main.c ::

#include <stdio.h>

int main(int argc, char* argv[]){
printf("Hello, world!\n");
return 0;
}

同时创建一个 CMakeLists.txt ::

PROJECT(HELLO)
SET(SRC_LIST main.c)
ADD_EXECUTABLE(hello ${SRC_LIST})

开始构建,为了减少对源代码目录的干扰,我们采用外部构建的方法,在 helloworld 里面创建一个 build 目录,在 build 目录中进行构建 ::

mkdir build
(cd build; cmake .. ; make)

可看到,在 build 中已生成一堆文件,通过
tree build 命令查看
::

build
├── CMakeCache.txt
├── CMakeFiles
│   ├── 3.5.1
│   │   ├── 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
│   ├── hello.dir
│   │   ├── build.make
│   │   ├── C.includecache
│   │   ├── cmake_clean.cmake
│   │   ├── DependInfo.cmake
│   │   ├── depend.internal
│   │   ├── depend.make
│   │   ├── flags.make
│   │   ├── link.txt
│   │   ├── main.c.o
│   │   └── progress.make
│   ├── Makefile2
│   ├── Makefile.cmake
│   ├── progress.marks
│   └── TargetDirectories.txt
├── cmake_install.cmake
├── hello
└── Makefile

其中包含了 Makefile ,中间文件,生成的最终文件 hello 等。

helloworld 项目使用的指令

helloworld 项目的 CMakeLists.txt 只使用到 3 个指令

PROJECT

PROJECT 指令用于说明项目的名称,用法为
PROJECT(项目名)
,定义了项目名称后,会隐式创建两个 cmake 变量
项目名_SOURCE_DIR
项目名_BINARY_DIR
,同时也会创建
PROJECT_SOURCE_DIR
PROJECT_BINARY_DIR
,其值与前面的一致。

SET

SET 指令用于创建变量,用法为
SET(变量名 [value])
。变量在使用时与 shell 有点类型,求值时用
${变量名}


ADD_EXECUTABLE

ADD_EXECUTABLE
用于指定生成一个可执行文件,用法为
ADD_EXECUTABLE(文件名 [源代码列表])


CMake 指令是不区分大小写的,一般建议指令用大写。

在构建时,一般采用外部构建的方式,这也是 cmake 推荐的构建方式。具体的做法是建立一个专门的 build 目录(任何地方均可),然后用
cmake 源代码目录
的方式,让所有生成的中间文件都保留在 build 目录中,不会污染原始的源代码目录。清理 cmake 的时候,就可以直接删除整个 build 目录,而不需要整理源代码中的大量中间文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: